PHP MySQL 数组排序


php mysql array sorting

我有一个数组来保存库存的名称和价格。我想对照price_list检查客户订单,并输入此订单的总价。

这是主要价目表:

$sql = "SELECT * FROM price_list WHERE id='1'";
$query = mysql_query($sql) or die ('Error: ' . mysql_error());
$num_rows = mysql_num_rows($query);
$data = array();
while( $row = mysql_fetch_array( $query ) )
{
    $t_name = $row['name'];
    $t_price = $row['price'];
    $t_array[] = array( "name" => $t_name, "price" => $t_price );
}

这是 mysql 中的客户订单:

$sql = "SELECT * FROM order WHERE id='1'";
$query = mysql_query($sql) or die ('Error: ' . mysql_error());
$num_rows = mysql_num_rows($query);
while( $row = mysql_fetch_array( $query ) )
{
    $pants = $row['pants'];
    $shirt = $row['shirt'];
    $hat = $row['hat'];
}

如果这是我回应上述内容,它将如下所示: 蓝色牛仔裤,黑色裤子, 白衬衫(X2),红衬衫, 黑帽子, 灰帽子

(X2)在price_list中不存在,我必须匹配price_list中的白衬衫,然后将其乘以2。此 (X2) 可以动态更改为任何其他项目,具体取决于订单。同样在结果上,我想通过像 $discount 这样的变量来多重播放裤子和帽子(而不是衬衫)的价格,这可能会降低折扣率。

我不得不提到这个订单是通过jquery来的,这就是为什么php不知道总价格的原因。

您可以使用 JOIN 语句通过单个查询获取该信息。
但是要完全涵盖您的问题(甚至远程完整)将涵盖相当广泛的主题(太大和广泛,无法在这里回答)。因此,我将为您提供一个独立示例,以鼓励您深入研究某些主题。(例如,表/索引结构远未达到"准备生产")

SSCCE:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');  
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);
$stmt = $pdo->query('
    SELECT
        p.name, p.price, o.qty
    FROM
        soFooOrderItems as o
    JOIN
        soFooPriceList as p
    ON
        o.itemid = p.itemid
    WHERE
        o.orderid = 1
');
$total = 0;
foreach( $stmt as $row ) {
    $subtotal = bcmul($row['qty'], $row['price'], 2);
    printf("%s (%d pcs) | %s per pc. | %s'r'n",
        $row['name'],
        $row['qty'],
        $row['price'],
        $subtotal
    );
    $total = bcadd($total, $subtotal, 2);
}
echo 'total: ', $total;

function setup($pdo) {
    $queries = array(
        '
            CREATE TEMPORARY TABLE soFooPriceList (
                itemid INT,
                name varchar(32),
                price Decimal(6,2)
            )
        ',
        '
            CREATE TEMPORARY TABLE soFooOrderItems (
                orderid int,
                itemid  int,
                qty int
            )
        ',
        "INSERT INTO soFooPriceList (itemid, name, price) VALUES (1, 'blue jeans', 2.0), (2, 'Disruptor MkIII', 870.5), (3, 'black pants', 1.4), (4, 'Emergency Transport Beacon', 600.75), (5, 'white shirt', 1.0)",
        "INSERT INTO soFooOrderItems (orderid,itemid, qty) VALUES
            (1,1,1), (1,3,2), (1,5,1),
            (2,2,1), (2,4,1), (2,1,1)
        ",
    );
    foreach( $queries as $q ) {
        $pdo->exec($q);
    }
}

指纹

blue jeans (1 pcs) | 2.00 per pc. | 2.00
black pants (2 pcs) | 1.40 per pc. | 2.80
white shirt (1 pcs) | 1.00 per pc. | 1.00
total: 5.80