【问题标题】:php mysql array sortingphp mysql 数组排序
【发布时间】:2015-01-28 05:09:17
【问题描述】:

我有一个包含库存名称和价格的数组。 我想对照 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),红衬衫, 黑帽子,灰帽子

price_list 中不存在 (X2),我必须匹配 price_list 中的白衬衫,然后将其乘以 2。 此 (X2) 可以根据订单动态更改为任何其他项目。 同样在结果上,我想将裤子和帽子(不是衬衫)的价格乘以 $discount 之类的变量,这可能是折扣率。

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

【问题讨论】:

  • 在ajax中只有总价会通过...
  • 在while循环前添加$total = 0;,在循环中添加$total += $row['price'];
  • 我猜这太复杂了,没人想碰它!
  • 请耐心等待。你会_得到帮助。可惜你是新人,不能提供赏金。尝试回答几个问题并总结一些观点。我不使用它们来衡量我的“聪明程度”,只是在我没有得到很好的答案时支付赏金;-)
  • 顺便说一句,mysql_ 函数已弃用。你应该使用php.net/manual/de/book.pdo.php

标签: php sorting arraylist


【解决方案1】:

您可以使用 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

【讨论】:

  • VolkerK,感谢您的指导和示例代码!我一直在尝试很多不同的方法,但不用说没有用……我会试试这个,希望能成功。
猜你喜欢
  • 2015-09-25
  • 2015-09-06
  • 2015-06-26
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
相关资源
最近更新 更多