在MySQL表行中对值进行求和的有效方法

时间:2012-05-20 21:11:31

标签: php mysql

我有一个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对应的位置。即:

$qtyArray = array();

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

我有两个问题:

  1. 上述工作会好吗?
  2. 有更好的方法吗?
  3. 谢谢!

3 个答案:

答案 0 :(得分:8)

MySQL为您做到了这一点:

SELECT product_id, sum(qty)
FROM tablename
GROUP BY product_id

答案 1 :(得分:1)

至于第一个问题。它会起作用,但会发出“Undefined offset”的注释

还记得数组索引必须是字符串,所以

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

答案 2 :(得分:1)

如上所述 - 您最好使用群组查询,因为效率更高。

然而:

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

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

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

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