2012-05-20 38 views
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的位置。即:

$qtyArray = array(); 

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

我有兩個問題:

  1. 將在上述工作好不好?
  2. 有沒有更好的方法來做到這一點?

謝謝!

+0

更好的方法是使用MySQL的SUM函數在返回到PHP之前執行所有算術運算 - SELECT product_id,SUM(qty)AS sum FROM myTable –

+0

'SELECT product_id,sum(qty)FROM yourTable GROUP BY product_id' –

回答

8

MySQL的爲您完成此:

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

謝謝你,先生! – Nate

1

至於第一個問題。它可以工作,但是請注意「未定義偏移」將發行

還記得數組索引必須是一個字符串,因此

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

如前所述 - 你最好使用一組查詢因爲這是很多更高效。

但是:

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

這回事,除非該變量已經設置觸發的通知。這是beause它等同於:

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

如果(在其他情況下),你需要做同樣的事情 - 檢查,如果有任何疑問數組鍵存在。