2016-01-21 4 views
2

Мне нужно получить сумму многих значений с тем же ключом из SQL Query. Например ... скажем, у меня есть 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.... 

Что мне нужно сделать, это сумма всех «а» и все «б» и все «с» и т.д. И положил все это в массив или объект, так что я могу получить доступ к ним для последующего обработка.

$ total = [(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 - эти строки? Это один столбец за ROW или 4 столбца за строку? – Andrew

+0

1,2,3,4 - это строки ..... 4 столбца в строке в моем примере. При фактическом использовании это может быть 30 строк с числом столбцов до 170, каждый с уникальным ключом. Некоторые строки могут иметь один столбец, а некоторые могут иметь до 170 столбцов. И что-то среднее между другими строками. Сложный вопрос? – whitelight

ответ

1

Is (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

Да ... это строки в БД. Каждая строка может содержать от нуля до 170 различных пар ключ: значение. 170 различных ключей и любое количество значений, все INT. Это ясно? – whitelight

+0

Это решение thomas_Ird делает именно то, что делает мой запрос. Он просто возвращает мне 30 строк, как я описал ранее. – whitelight

0

Я не уверен, я полностью понимаю ваше требование, но вы можете использовать метод SUM() в SQL.

SELECT SUM(column_name) FROM table GROUP BY column_name 
0

Добавить WITH ROLLUP в запрос после предложения GROUP 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 внутри время цикла:

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

С ROLLUP меня приближает.Он показывает общую сумму для каждой строки. Но то, что мне нужно, это общее количество каждого действия для всех 30 строк. – whitelight

Смежные вопросы