1

我有一个看起来像这样的 MySQL 表:

+--------------------------------------+
|   id   |    product_id   |   qty     |
+--------------------------------------+
|    1   |        0        |    1      |
|    2   |        1        |    3      |
|    3   |        0        |    2      |
|    4   |        2        |    18     |
+--------------------------------------+

我想获取表中每种产品的总数。因此,例如,对于上表,这是我想要的结果:

0 -> 3
1 -> 3
2 -> 18

我认为最简单的方法是遍历 MySQL 结果并将每个产品的数量添加到数组中,在数组中与 product_id 对应的位置。IE:

$qtyArray = array();

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{
    $qtyArray[$row[product_id]] += $row[qty];
}

我有两个问题:

  1. 上述工作可以吗?
  2. 有没有更好的方法来做到这一点?

谢谢!

4

3 回答 3

8

MySQL 为您执行此操作:

SELECT product_id, sum(qty)
FROM tablename
GROUP BY product_id
于 2012-05-20T21:16:40.403 回答
1

至于第一个问题。它会起作用,但会发出通知“未定义的偏移量”

还要记住,数组索引必须是一个字符串,所以

$qtyArray[$row['product_id']] += $row['qty'];
于 2012-05-20T21:18:10.777 回答
1

如前所述 - 你最好使用组查询,因为这样更有效。

然而:

$qtyArray[$row[product_id]] += $row[qty];

除非已经设置了变量,否则这将触发通知。那是因为它相当于:

$qtyArray[$row[product_id]] = 
    $qtyArray[$row[product_id]] + // First time around this won't exist
    $row[qty];

如果(在其他情况下)您需要做类似的事情 - 如果有任何疑问,请检查数组键是否存在。

于 2012-05-20T21:18:37.393 回答