2016-04-18 11 views
2

私のデータベースにはmysqlを使用しています。私はテーブルに分析の詳細を作成しました。そのデータをグラフに表示したい。私は特定のリンクのクリックとデータベースに保存された日時のデータを作成しました。 表は、私は今日のために時間に基づいて、毎週平日(日曜日、月曜日、火曜日...土曜日)の代わりに、時間の同様今日、毎週、毎月、および2つの日付の間にmysqlデータベースを使用してグラフを作成します

hour | click 
--------------- 
1 | 0 
2 | 0 
3 | 0 
4 | 0 
5 | 2 
6 | 0 
7 | 1 
8 | 1 
9 | 1 
10 | 0 
11 | 1 
12 | 0 
13 | 0 
14 | 0 
15 | 0 
16 | 0 
17 | 0 
18 | 1 
19 | 0 
20 | 1 
21 | 0 
22 | 0 
23 | 0 
24 | 0 

のようなデータを表示したい

id | datetime 
------------- 
1 | 2016-04-18 05:26:36 
2 | 2016-04-18 07:26:36 
3 | 2016-04-18 09:26:36 
4 | 2016-04-18 11:26:36 
5 | 2016-04-18 08:26:36 
6 | 2016-04-18 05:26:36 
7 | 2016-04-18 20:26:36 
8 | 2016-04-18 18:26:36 

のようなものです毎月の番号(1,2,3,4,5 ...... 28/29/30/31)

今日のリストのクエリを使用しましたが、データが存在する時間の名前のみが表示されます。その時間に値がない場合は、0のフィルですべての時間リストが必要です。

私はこのクエリを使用しています。

SELECT DISTINCT(hour(`beacon_date_time`)) as hour,COUNT(*) from beaconanalytics WHERE DATE_FORMAT(`beacon_date_time`,'%Y-%m-%d') BETWEEN DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY),'%Y-%m-%d') AND DATE_FORMAT(NOW(),'%Y-%m-%d') GROUP by hour(`beacon_date_time`) 

私は7日のためにクエリを使用していますが、それはまた、残りの日のためのショー0のデータベースではない一日の記録を与えています。

これはクエリです。

SELECT dayname(`beacon_date_time`) as hour,COUNT(*) from beaconanalytics WHERE DATE_FORMAT(`beacon_date_time`,'%Y-%m-%d') BETWEEN DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 7 DAY),'%Y-%m-%d') AND DATE_FORMAT(NOW(),'%Y-%m-%d') GROUP by dayname(`beacon_date_time`) 
+0

を試してみてください私はこれらを埋めるだろう'php'コードのゼロ。たとえば、すべての値を0に初期化した 'hours [1-24]'という配列があります。次に、クエリを使用して、数時間をデータで上書きします。 – akasummer

答えて

0

少し奇妙に見える、これを試してみてください。毎週のためにこれを試してみてください

SELECT tmp.hour, sum(tmp.click) AS click 
FROM 
    (SELECT DISTINCT 
    (hour(`beacon_date_time`)) AS hour, 
    COUNT(*) AS click 
    FROM beaconanalytics 
    WHERE DATE_FORMAT(`beacon_date_time`, '%Y-%m-%d') BETWEEN DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY), 
                     '%Y-%m-%d') AND DATE_FORMAT(NOW(), '%Y-%m-%d') 
    GROUP BY hour(`beacon_date_time`) 
    UNION 
    SELECT 1 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 2 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 3 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 4 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 5 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 6 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 7 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 8 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 9 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 10 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 11 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 12 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 13 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 14 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 15 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 16 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 17 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 18 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 19 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 20 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 21 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 22 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 23 AS hour, 0 AS click FROM dual 
    UNION 
    SELECT 24 AS hour, 0 AS click FROM dual) tmp 
GROUP BY tmp.hour 

);)

SELECT tmp.dayname, sum(tmp.click) AS click 
FROM 
    (SELECT dayname(`beacon_date_time`) as dayname,COUNT(*) AS click from beaconanalytics WHERE DATE_FORMAT(`beacon_date_time`,'%Y-%m-%d') BETWEEN DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 7 DAY),'%Y-%m-%d') AND DATE_FORMAT(NOW(),'%Y-%m-%d') GROUP by dayname(`beacon_date_time`) 
    UNION 
    SELECT 'Monday' AS dayname, 0 AS click FROM dual 
    UNION 
    SELECT 'Tuesday' AS dayname, 0 AS click FROM dual 
    UNION 
    SELECT 'Wednesday' AS dayname, 0 AS click FROM dual 
    UNION 
    SELECT 'Thursday' AS dayname, 0 AS click FROM dual 
    UNION 
    SELECT 'Friday' AS dayname, 0 AS click FROM dual 
    UNION 
    SELECT 'Saturday' AS dayname, 0 AS click FROM dual 
    UNION 
    SELECT 'Sunday' AS dayname, 0 AS click FROM dual 
) tmp 
GROUP BY tmp.dayname 
+1

毎月さらに選択します。もし彼が年次報告をすることを決めるのであれば、あるいは何十年もの間、 :D – akasummer

+0

あなたが言ったことは、このクエリのパフォーマンスについて心配していますか?-.- – Blank

+1

私が言ったことは、あなたのソリューションが間違いなく道のりではないというヒントを与えていることです。 – akasummer

0

SELECT days.daynum, IF(count.c IS NULL, 0, count.c) from 
     (
     SELECT t*10+u daynum 
     FROM 
      (SELECT 0 t UNION SELECT 1 UNION SELECT 2 UNION SELECT 3) A, 
      (SELECT 0 u UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 
      UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 
      UNION SELECT 8 UNION SELECT 9) B 
     ORDER BY daynum 
     ) as days 
     LEFT JOIN 
     (
     SELECT DISTINCT(hour(`beacon_date_time`)) as hour,COUNT(*) as c from beaconanalytics WHERE DATE_FORMAT(`beacon_date_time`,'%Y-%m-%d') BETWEEN DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY),'%Y-%m-%d') AND DATE_FORMAT(NOW(),'%Y-%m-%d') GROUP by hour(`beacon_date_time`) 
     ) as count ON count.hour = days.daynum ORDER BY days.daynum 
+0

このショー39レコード。以前の回答は24時間の記録に適しています。しかし今質問は、私が日曜日、月曜日...土曜日が1,2,3 ... 24の代わりに欲しい週別データです。 –

+0

あなたも@SatanandTiwariと質問を更新してください。 –

+0

はい、私はそれを更新しました。 –

関連する問題