如何在PHP MySQL中读取查询行并计算多行?

时间:2016-11-29 08:56:21

标签: php mysql

这是我之前提问的延伸。 我之前的问题解决了我的问题。链接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);
    }
?>

有人可以帮忙吗?

感谢。

2 个答案:

答案 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成为了小组的关键