0

全て順調に行きますように。

私は現在 PHP を独学で学んでおり、その一環として、私が働いているレストランの顧客からのフィードバック カードから情報を保存するフィードバック システムを開発しようとしています。

私が抱えている問題は、グラフを作成するためにjqplotによって使用されるjson出力を生成するために使用しているphpコードを中心に展開しています。

これを行うために使用しているコードは次のとおりです。

<?php

// $toDate and $fromDate will eventually be values coming over via post however i am using static values at the moment for testing

$toDate = time();
$fromDate = time() - (7 * 24 * 60 * 60);

$sql = "SELECT * FROM feedback WHERE visitDateTime BETWEEN FROM_UNIXTIME($fromDate) AND FROM_UNIXTIME($toDate)";

$result = mysql_query($sql) or die(mysql_error());
?>

データを取得したら、このコードを javascript と php で使用して jqplot データを生成します。

<script>
$(document).ready(function(){
 var line1 = [
<?php
while ($row = mysql_fetch_assoc($result)){
echo '[';
echo "'";
echo $row['visitDateTime'];
echo "',";
echo $row ['foodScore'];
echo ']';
echo ',';
}

?>

];

// code then goes on to generate the chart, etc....

</script>

これは正常に機能し、次の json 出力が生成されます。

 var line1 = [
['2012-04-20 19:00:00',7],['2012-04-20 19:00:00',8],['2012-04-20 12:00:00',8],['2012-04-22 16:00:00',5],['2012-04-21 20:00:00',9],  

];

ただし、私が抱えている問題は、2 つの日付と時刻が同じである場合 (おそらくそうであろう)、1 つの日付に複数の値があるため、グラフに問題が発生することです。

少し考えた後、実際に行う必要があるのは、日付と時刻の平均スコアを計算して、以下に示すような出力を生成するという結論に達しました。

var line1 = ['unique date/time', average of all scores from this date/time ]

しかし、私はそれを始める方法さえ知りません。

これはおそらく間違っていると思いますが、取得したすべてのレコードをループして、日付/時刻が同じかどうかを確認する必要があると考えています。基本的に、これを返す代わりに:

['2012-04-20 19:00:00',7],['2012-04-20 19:00:00',8],['2012-04-20 12:00:00',8],['2012-04-20 12:00:00',5],['2012-04-20 12:00:00',9]

私はこれを返す必要があります:

['2012-04-20 19:00:00',7.5],['2012-04-20 12:00:00',7.3]

誰かが私にこれを行う方法についての指針を提供できれば、それは本当に私を助けてくれるでしょう.

みんな、ありがとう。

4

1 に答える 1

2

サーバーで平均計算を行う代わりに、MySQLに計算を任せることができます。このようなクエリを使用して、MySQLから直接グループ化および平均化されたデータを取得できます。

SELECT avg(foodScore), visitDateTime FROM feedback WHERE visitDateTime BETWEEN FROM_UNIXTIME($fromDate) AND FROM_UNIXTIME($toDate) group by visitDateTime

これが機能しない場合はお知らせください

于 2012-04-24T11:00:59.777 に答える