1

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

3 回答 3

0

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

SELECT EXTRACT(HOUR FROM sessionend_date) AS hour, COUNT(*) 
  FROM your_table
 WHERE DATE(sessionend_date) = '2012-11-22'
 GROUP BY hour;
于 2013-01-11T13:18:49.347 回答
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
于 2013-01-11T13:18:55.960 回答
0

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

或者,您可能想使用 strtotime 添加一个小时:

$starttime = "01:00";

$endtime = strtotime($starttime, "+1 hour")
于 2013-01-11T13:38:47.777 回答