从24小时天的小时日期范围中选择日期



我需要做一份报告。随着时间的推移,报告跟踪用户在终端上单击的位置,这些单击存储在数据库中的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个变量$ starttime = 00:00;$endHour = $ starhour + 01:00;

然后循环递增$startHour直到它匹配结束小时,但是我不知道我是否可以像这样递增小时变量

日期以以下格式存储: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

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

或者,您可以使用strtotime来添加一个小时:

$starttime = "01:00";
$endtime = strtotime($starttime, "+1 hour")

我不明白这两个表是如何相关的(你说的输出必须是小时+点击,但查询选择了很多字段),但如果你想显示按小时分组的点击试试这样的东西:

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

这将按小时对所有结果进行分组。

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

相关内容

  • 没有找到相关文章

最新更新