使用mysql数据库创建今天、每周、每月和两个日期之间的图表


Create chart using mysql data base for today, weekly, monthly and between two date

我的数据库使用mysql。我在表格中创建了分析细节。我想在图表中显示这些数据。我已经创建了点击特定链接的数据和保存在数据库中的日期时间。表格类似

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

我想像一样显示今天基于小时的数据

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

同样,对于每周,工作日(周日、周一、周二…周六)而不是小时,周数(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`)

我使用了七天的查询,但它也给出了数据库中当天的记录,而不是剩余天数的显示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`)

试试这个,看起来有点奇怪;)

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

请尝试

 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