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

如何在PHP MySQL中读取查询行并计算多行?,php,mysql,Php,Mysql,这是我上一个问题的延伸。 我先前的问题解决了我的问题。链接 但只有当查询的每一行都有不同的值(即1st row=1和2nd row=1.5)时,它才起作用。只有这样它才能计算这两行 它不起作用,并且无法计算行是否具有相同的值(即第一行=1和第二行=1)。它只显示一行 代码如下所示 <?php $sql = "SELECT sum_hour, SUM(sum_hour) FROM table

这是我上一个问题的延伸。 我先前的问题解决了我的问题。链接

但只有当查询的每一行都有不同的值(即1st row=12nd row=1.5)时,它才起作用。只有这样它才能计算这两行

它不起作用,并且无法计算行是否具有相同的值(即第一行=1第二行=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);
    }
?>

有人能帮忙吗


谢谢

我认为问题在于SQL中的分组-它似乎没有必要。按字段分组,然后对该字段求和,这有点矛盾

例如,如果有如下四行:

| 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
然后在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
$result=mysqli\u查询($connect,$sql);
如果($结果)
{
$total=0;
如果($row=mysqli\u fetch\u assoc($result))
{   
$total=$row['total'];
}
echo“总小时数=”.$Total.“
”; //…等等
注意按小时分组

"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 ";
“选择总小时,
总和(总和小时)
从桌子上
其中,type_move='P'和user_id='username'

和(开始日期>='2016-11-11'和结束日期您的代码在$total中似乎是正确的,您应该获得2是的。但它仅在查询的行具有不同的值时起作用。如果两行具有相同的值,则不起作用检查键入:
total=0;
将是
$total=0;
谢谢。已更改。:)很奇怪..尝试添加变量转储($total);在$total+=$hour之后;这样您就可以一步一步地检查结果了。我会先试试。稍后再通知您。谢谢:)您的建议代码不起作用。它没有计算行。@Jamilah请提供更多详细信息。使用我的建议的查询结果是什么?与您的建议相比,它有什么问题?(我不是说PHP部分,只是SQL)当我在SQL中运行它时,值和是完美的,没有任何问题。但是应该是(1+1=2)。但是PHP中的输出仍然显示为1。输出不计算行。@Jamilah所以我版本中的查询返回一行,其中值为2,对吗?
---------
| total |
---------
| 9.5   |
$result = mysqli_query($connect, $sql);

if($result)
{
    $total = 0;

    if($row = mysqli_fetch_assoc($result))
    {   
        $total = $row['total'];
    }

    echo "Total hours = " .$total. "<br/>";
//...etc
"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 ";