2013-08-16 82 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给出的答案是正确的。