Php 使用mysql数据库创建今天、每周、每月和两天之间的图表
我正在使用mysql作为我的数据库。我已经在表格中创建了分析细节。我想在图表中显示这些数据。我已经在点击特定链接时创建了数据,并在数据库中保存了日期和时间。 这张桌子像Php 使用mysql数据库创建今天、每周、每月和两天之间的图表,php,mysql,select,Php,Mysql,Select,我正在使用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
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)用于每月细节
我使用了一个查询today列表,但它只给出数据所在的小时名称。我需要所有小时列表,如果该小时内没有值,则填写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 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
我只想在
php
code中填充这些零。例如,您有一个数组hours[1-24]
,所有值都初始化为0。然后你使用你的查询并用数据覆盖几个小时。对于每月甚至更多的选择。如果他决定做年度报告或十年报告呢D@akasummer您所说的是担心此查询的性能?--我所说的是暗示您的解决方案肯定不是可行的。@akasummer是的,就是这样,我的解决方案可能不是可行的,嗯。。。我只是把它看作一个纯SQL问题。同样地,我已经为周数据创建了查询。这也会给出数据所属的结果,但在剩余天数内不会显示0。查询是::-选择dayname(beacon\u date\u time
)作为小时,从beaconanalytics中计数(*),其中date\u格式(beacon\u date\u time
,“%Y-%m-%d”)在date\u格式(date\u SUB(现在(),间隔7天),“%Y-%m-%d”)和date\u格式(现在(),“%Y-%m-%d”)之间按dayname(beacon\u date\u time
)分组显示39条记录。之前的答案是好的24小时记录。但现在的问题是每周数据,我想要周日,周一。。。周六而不是1,2,3…..24.好的,你能不能同时更新你的问题@SatanandTiwari
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