Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用mysql数据库创建今天、每周、每月和两天之间的图表_Php_Mysql_Select - Fatal编程技术网

Php 使用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

我正在使用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)用于每月细节

我使用了一个查询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