这是我之前提问的延伸。 我之前的问题解决了我的问题。链接How to calculate rows in query PHP MySQL?
但它只有在每行查询都有不同的值时才有效(即第1行= 1 和第2行= 1.5 )。只有这样才能计算出这两行。
它不起作用,它无法计算行是否具有相同的值(即第1行= 1 和第2行= 1 )。它只显示单行
以下代码
<?php
$sql = "SELECT sum_hour,
SUM(sum_hour)
FROM table
WHERE type_move = 'P' AND user_id='username' AND (start_date >= '2016-11-11' AND end_date <= '2016-11-15')
GROUP BY sum_hour ";
$result = mysqli_query($connect, $sql);
if($result && mysqli_num_rows($result) > 0)
{
$total = 0;
while($row = mysqli_fetch_assoc($result))
{
$hour = $row['sum_hour'];
$total += $hour;
echo " Hours = " .$hour. "<br/>";
print_r($row);
}
echo "Total hours = " .$total. "<br/>";
mysqli_free_result($result);
}
else
{
echo mysqli_error($connect);
}
?>
有人可以帮忙吗?
感谢。
答案 0 :(得分:1)
我认为问题在于SQL中的分组 - 似乎没必要。按字段分组然后执行该字段的SUM是有点矛盾的。
例如,如果你有四行:
| sum_hour |
------------
| 3.0 |
| 4.5 |
| 1.0 |
| 1.0 |
然后按原样运行查询应生成以下行:
----------------------------
| sum_hour | SUM(sum_hour) |
----------------------------
| 3.0 | 3.0 |
----------------------------
| 4.5 | 4.5 |
----------------------------
| 1.0 | 2.0 | <-- all the 1.0s in the table have been grouped together by the GROUP BY clause and then the SUM of those rows calculated
如果您只想要所有这些的总和,这似乎有点无意义。
更改
SELECT sum_hour, SUM(sum_hour)
FROM table
WHERE type_move = 'P' AND user_id='username' AND (start_date >= '2016-11-11' AND end_date <= '2016-11-15')
GROUP BY sum_hour
到
SELECT SUM(sum_hour) AS total
FROM table
WHERE type_move = 'P'
AND user_id='username'
AND (start_date >= '2016-11-11' AND end_date <= '2016-11-15')
这样你应该只从包含数据库中所有匹配行的SUM的查询返回一个值,你可能根本不需要你的PHP循环。
在上面的示例中,此更改的查询将产生以下结果:
---------
| total |
---------
| 9.5 |
然后在PHP中,您只需要检索一个值,如下所示:
$result = mysqli_query($connect, $sql);
if($result)
{
$total = 0;
if($row = mysqli_fetch_assoc($result))
{
$total = $row['total'];
}
echo "Total hours = " .$total. "<br/>";
//...etc
答案 1 :(得分:0)
小心按照sum_hour
分组"SELECT sum_hour,
SUM(sum_hour)
FROM table
WHERE type_move = 'P' AND user_id='username'
AND (start_date >= '2016-11-11' AND end_date <= '2016-11-15')
GROUP BY sum_hour ";
如果您有2行sum_hour
= 1,那么上面的查询会返回SUM(sum_hour)
= 2,因为它是按键分组的正确总和
尝试使用sum_hour = 1的3行或更多行,您会看到总和增加 因为1成为了小组的关键