2016-01-21 61 views
2

我需要獲得很多值的總和與來自SQL查詢相同的密鑰。 例如...說我有30行從查詢返回,他們看起來像這樣。SQL如何總結許多記錄鍵:值對?

1) (a:2), (b:4),(f:1), (h:3) 
2) (c:2), (f:4),(t:1), (z:3) 
3) (a:5), (b:2),(s:1), (z:3) 
4) (d:2), (g:4),(s:1), (t:3) 
and so on.... 

我需要做的是總結所有的「a」,所有的「b」和所有「C」等 並把所有到一個數組或對象,以便我可以訪問他們以後處理。

$總= [(A:7),(B:6),(C:2),(d:2).....(Z:6)];

有沒有辦法做到這一切從SQL?或者我必須使用PHP對外部所有這些記錄進行求和?

這是我的SQL代碼,以獲得30個記錄......

while($row = mysql_fetch_array($rs)) { 
$queryActivity = "SELECT activity, count(activity) FROM users u, activities_users au, activities a WHERE ($row[zip] = u.zip AND u.id = au.user_id AND au.activity_id = a.id) GROUP BY a.activity"; 
$rs2 = mysql_query($queryActivity); 
while($row2 = mysql_fetch_array($rs2)) { 
echo "<tr><td>$row2[0]</td><td>"; 
echo "<tr><td>$row2[1]</td><td>";} 

它返回的所有活動和這些活動的一定郵編總和。我只需要爲每項活動總計所有款項。

+0

你的意思是像'SUM'和'GROUP BY'的組合? – frz3993

+0

1,2,3,4 - 這些行?它是每列一列還是每列四列? – Andrew

+0

1,2,3,4是行.....在我的例子中每行4列。在實際使用中,它可以是30行,最多170列,每列都有唯一的密鑰。有些行可能有一列,有些可能有多達170列。和其他行之間的任何東西。複雜的查詢吧? – whitelight

回答

1

爲(a:2),(B:4)......在數據庫中的行?

您將需要使用某種分裂,SUM,以及GROUP BY的。在我們獲得更多信息之前,這將很難提供幫助。

所以這裏是一個快速的查詢,將通過行的第一子組。你可以爲其他子集做同樣的事情。我不知道有什麼方法可以在純粹的MySQL中執行您想要的操作。

SELECT 
    SUBSTRING(activity, 1,2), 
    count(activity) 
FROM users u, activities_users au, activities a 
WHERE ($row[zip] = u.zip AND u.id = au.user_id AND au.activity_id = a.id) 
GROUP BY SUBSTRING(activity, 1,2) 
+0

這不是問題的有用答案,更適合作爲評論。 – miken32

+0

是...那些是DB中的行。每行可能包含0到170個不同的Key:Value對。所有INT有170個不同的鍵和任意數量的值。這更清楚了嗎? – whitelight

+0

thomas_Ird的這個解決方案完全符合我的查詢要求。它只是返回我30行,如我前面所述。 – whitelight

0

我不確定我完全理解您的要求,但您可以在sql中使用SUM()方法。

SELECT SUM(column_name) FROM table GROUP BY column_name 
0

組後添加WITH ROLLUP到您的查詢BY子句:

SELECT activity, count(activity) 
    FROM users u, activities_users au, activities a 
    WHERE ($row[zip] = u.zip AND u.id = au.user_id AND au.activity_id = a.id)  
GROUP BY a.activity WITH ROLLUP 

這將增加一個額外的行(空,totalsum)到你需要PHP來處理結果集。

作爲替代方案,你可以用PHP計算的話你的while循環中:

$total[$row2[0]] = (empty($total[$row2[0]]) ? 0 : $total[$row2[0]]) + $row2[1] 
+0

WITH ROLLUP讓我更接近。它顯示每行的總和。但我需要的是所有30行的每項活動的總數。 – whitelight