0
VISITORS TBL
ID  product_id  hits    date
130     1       1   2012-08-11
94     810      53  2012-08-06
95     810      32  2012-08-07
96     810      22  2012-08-09
97     810      13  2012-08-10
98     810      16  2012-08-11
99     810      13  2012-08-22

私は訪問者のために上記のような訪問者のMySQLテーブルを持っています。Jquery Flotを使用して、過去30日間の訪問者の折れ線グラフをプロットすることを計画しています。

[1、0]、[2、0]、[3、0]、[4、0]、[5、0]、[6、53]、[7、32]、[8、 0]、[9、22] ...... [30、0]mysqlとphpを使用してproduct_id=810の30日でリストを生成するにはどうすればよいですか?単一のSQLクエリで実行できますか?またはphpループを使用しますか?

4

1 に答える 1

1

これを行うためのMySQL専用の方法があるかどうかはわかりませんが、これは間違いなく機能します(ずさんで非推奨のMySQL / PHP関数を使用していますが)

<?
$rs = mysql_query("SELECT hits,date FROM visitors WHERE product_id=81 AND date BETWEEN 2012-08-01 AND 2012-08-31 ORDER BY date ASC");
$flot = array();
$last_date = '2012-08-00';
$day = 1;

if ($rs && mysql_num_rows($rs)) {
    while ($row = mysql_fetch_array($rs)) {
        $days_since = check_days_since($row['date'], $last_date);
        print $row['date'] . '|' . $last_date . '|' . $days_since . "\n";

        if ($days_since) {
            for ($i = 1; $i < $days_since; $i++) {
                $flot[] = array($day++, 0);
            }
        }

        $flot[] = array($day++, $row['hits']);
        $last_date = $row['date'];
    }
}

print json_encode($flot);


function check_days_since($new, $old) {
    if (!$new || !$old) return 1;
    return (strtotime($new) - strtotime($old)) / (60*60*24);
}
?>
于 2012-09-30T04:28:41.353 に答える