0

mysql を使用して、テーブル内の $spent の毎日の平均を計算しています。PHP では、これらすべての日次平均を 1 日平均に平均化したいと考えています。最終的には、複数のテーブルに対してこれを行い、最終的な平均をハイチャートでグラフ化したいと考えています。現在、php でクエリの結果を平均化することができません。データベースに接続していますが、コードに表示されていません。以下のコードを参照してください。

<?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);
?>
4

3 に答える 3

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;
于 2013-08-16T18:13:19.373 に答える
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'] );
于 2013-08-16T17:32:10.237 に答える
0

これは、PHP やその他のスクリプト言語とは何の関係もありません。これはまさに、DB クエリ内で常に解決を試みる必要のある種類のものです。単一のクエリで取得できる計算を行うためだけにすべてのデータをスクリプトに渡すよりも、よりクリーンなソリューションとはるかに優れたパフォーマンスが得られます。最初の場所。ゴードン・リノフの答えは正しいものです。

于 2013-08-21T17:46:08.683 に答える