从小时日期范围中选择日期为24小时

时间:2013-01-11 13:08:35

标签: php mysql date datetime

我需要做一份报告。该报告跟踪用户在终端上点击终端的位置,这些点击存储在数据库中的2个表中。我需要找到一个优雅的解决方案来循环日期范围并为一天中的每个小时执行报告。

我坚持使用最好和最优雅的方式来循环播放时间(报告将显示从00:00到23:00的小时数,即使该小时没有记录点击次数。)

所以我的输出需要(作为例子)

00:00   -   34 clicks
01:00   -   22 clicks
02:00   -   91 clicks
03:00   -   4  Clicks
...
...
23:00   -  17  Clicks

我在考虑在PHP中声明2个变量 $ startHour = 00:00; $ endHour = $ startHour + 01:00;

做一个循环递增$ startHour unitl它匹配结束时间,但我不知道我是否可以像这样增加小时变量。

日期以以下格式存储:2012-11-22 09:17:29

这是我的mysql查询:

SELECT tbl_xboxstats.sessionend_date, 
       tbl_xboxstatsaux.XboxStatsId, 
       tbl_xboxstatsaux.ItemId, 
       tbl_xboxstats.UnitId, 
       tbl_xboxstats.UIId, 
       WEEK( tbl_xboxstats.sessionend_date ) AS WeekNumber, 
       Count(tbl_xboxstatsaux.ItemId) AS Count
FROM tbl_xboxstats
INNER JOIN tbl_xboxstatsaux ON tbl_xboxstats.id = tbl_xboxstatsaux.XboxStatsId
WHERE tbl_xboxstats.sessionend_date
BETWEEN '2012-11-22 "' . $startHour . '"'
AND '2012-11-22"' . $endHour . '"'
GROUP BY tbl_xboxstatsaux.XboxStatsId
LIMIT 0 , 30

3 个答案:

答案 0 :(得分:0)

我不知道两个表是如何相关的(你说输出必须是小时+点击,但查询选择了很多字段)但是如果你想显示按小时分组的点击次数,请尝试以下方法:

SELECT EXTRACT(HOUR FROM sessionend_date) AS hour, COUNT(*) 
  FROM your_table
 WHERE DATE(sessionend_date) = '2012-11-22'
 GROUP BY hour;

答案 1 :(得分:0)

这会按小时将所有结果分组。

SELECT tbl_xboxstats.sessionend_date, 
       tbl_xboxstatsaux.XboxStatsId, 
       tbl_xboxstatsaux.ItemId, 
       tbl_xboxstats.UnitId, 
       tbl_xboxstats.UIId, 
       WEEK( tbl_xboxstats.sessionend_date ) AS WeekNumber, 
       HOUR( tbl_xboxstats.sessionend_date ) AS Hours
       Count(tbl_xboxstatsaux.ItemId) AS Count
FROM tbl_xboxstats
INNER JOIN tbl_xboxstatsaux ON tbl_xboxstats.id = tbl_xboxstatsaux.XboxStatsId
WHERE tbl_xboxstats.sessionend_date
BETWEEN '2012-11-22 "' . $startHour . '"
AND '2012-11-22"' . $endHour . '"
GROUP BY Hours
LIMIT 0 , 30

答案 2 :(得分:0)

我认为最安全的方法可能是将您的开始日期转换为时间戳,为其添加3600(1小时),然后将其重新转换为日期格式。

或者,您可能希望使用strtotime添加一小时:

$starttime = "01:00";

$endtime = strtotime($starttime, "+1 hour")