2013-08-16 178 views
0

我正在計算使用mysql的表中每日消耗的$的平均值。在PHP中,我想將所有這些日均值平均爲1日平均值。最後,我想爲多個表格做這件事,並在高層圖中畫出最終的平均值。現在,我不能讓PHP來平均我的查詢結果。我連接到我的數據庫,但沒有在代碼中顯示它。見下面的代碼:PHP從mysql中獲取的每日平均值的平均值

<?php 

    function array_average($arr){ 
     $sum = array_sum($arr); 
     $num = sizeof($arr); 
     echo $sum/$num; 
    } 

    $sth = mysql_query("SELECT round((sum(d_power),2) as $perton FROM pheom.pheom_gb WHERE timestamp between subdate(curdate(), interval 3 month) and curdate() GROUP BY Day(timestamp) ORDER BY Timestamp"); 
    $rows = array(); 
    while($r = mysql_fetch_array($sth)) { 
     $rows['data'][] = $r['$perton']; 
    } 

    echo array_average($rows); 

    mysql_close($con); 
?> 

回答

0

$perton哪裏來的?你的查詢是雙引號,這意味着該變量正在擴展,但你的數組訪問是在單引號,所以它不是。

如果沒有定義$perton,那麼我相信你的查詢將被評估爲:

SELECT round((sum(d_power),2) as FROM pheom.pheom_gb WHERE timestamp between subdate(curdate(), interval 3 month) and curdate() GROUP BY Day(timestamp) ORDER BY Timestamp 

這是一個語法錯誤。我不認爲array_sum與多維數組一起工作。我會嘗試:

echo array_average($rows['data']); 
2

爲什麼不在SQL中進行計算?

select avg($perton) as $perton 
from (SELECT round(sum(d_power), 2) as $perton 
     FROM pheom.pheom_gb 
     WHERE timestamp between subdate(curdate(), interval 3 month) and curdate() 
     GROUP BY Day(timestamp) 
    ) t; 
+0

這將是一個很好的選擇。但我無法讓它在mysql中工作。我收到錯誤:每個派生表都必須有自己的別名。 – user2686567

+0

@ user2686567。 。 。關門後你有最後的't'嗎? –

0

這與PHP或任何其他腳本語言無關。這正是你在數據庫查詢中應該總是試圖解決的事情 - 你會得到更清晰的解決方案和更好的性能,而不是將所有數據傳遞給腳本,只是爲了進行計算,你可以用一個單一的查詢第一個地方。 Gordon Linoff給出的答案是正確的。