我需要做一份报告。随着时间的推移,报告跟踪用户在终端上单击的位置,这些单击存储在数据库中的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