2016-11-29 48 views
-1

這是我以前的問題的擴展。 我以前的問題解決了我的問題。鏈路How to calculate rows in query PHP MySQL?如何在PHP MySQL中讀取查詢行並計算多行?

但它只有當查詢的每一行具有不同的值工作(即第一行= 1第二行= 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); 
    } 
?> 

有人能幫忙嗎?

謝謝。

+0

您的代碼似乎正確$總,您應該獲得2 – scaisEdge

+0

是的。但只有當查詢行具有不同的值時纔有效。如果兩行具有相同的值,則不起作用 – Jamilah

+0

檢查錯字:'total = 0;'將'$ total = 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 
+0

我明白了。我會先嚐試一下。我稍後會通知你。謝謝:) – Jamilah

+0

您的建議代碼不起作用。它沒有計算該行。 – Jamilah

+1

@Jamilah請詳細介紹一下。使用我的建議查詢的結果是什麼?和你的相比,它有什麼問題? (我不是在談論PHP部分,只是SQL) – ADyson

0

要小心由group_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 then上述返回查詢SUM(sum_hour) = 2,因爲是正確的總和的關鍵

分組有3個或更多的行與sum_hour = 1試試,你看到的事實的總和增加 是1成爲鍵組由