我需要从SQL查询中获取具有相同键的许多值的总和。例如。。。假设我从查询返回了 30 行,它们看起来像这样。
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"等并将所有这些放入数组或对象中,以便我可以访问它们以供以后处理。
$total = [(a:7),(b:6),(c:2),(d:2).....(z:6)];
有没有办法从SQL完成这一切? 或者我是否必须使用 PHP 在外部对所有这些记录求和?
这是我获取 30 条记录的 SQL 代码...
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>";}
它返回特定邮政编码的所有活动以及这些活动的总和。 我只需要对每项活动的所有汇总进行汇总。
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)
我不确定我是否完全理解您的要求,但是您可以在sql中使用SUM()
方法。
SELECT SUM(column_name) FROM table GROUP BY column_name
在
GROUP BY 子句之后将WITH ROLLUP
添加到查询中:
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
它将向需要在 PHP 中处理的结果集添加一个额外的行(null,总计)。
作为替代方案,您可以在 while 循环中使用 PHP 进行计算:
$total[$row2[0]] = (empty($total[$row2[0]]) ? 0 : $total[$row2[0]]) + $row2[1]