我有一个MySQL表,用于存储访问我网站的每个用户的数据。我使用UNIX时间戳来指示访问的时间。
我想获得时间x和时间y之间每小时的访问次数。
这是我能想到的:
这种方法的问题在于它没有解决没有访问的时间,我需要x和y之间每小时的数据,而不仅仅是有访问的数据。
// the timestamp for 03/16/2015
$x = 1426489200;
// the timestamp for 04/16/2015
$y = 1429167600;
//Getting the nearest hour
$start = floor($x / 3600) * 3600;
$end = ceil($y / 3600) * 3600;
$Db->query("SELECT ROUND(time/3600) AS timekey, COUNT(*) FROM visits WHERE time>='$start' AND time<='$end' GROUP BY timekey");
这种方法应该可以正常工作,但我担心性能,特别是如果x和y相隔1个月。
// the timestamp for 03/16/2015
$x = 1426489200;
// the timestamp for 04/16/2015
$y = 1429167600;
//Getting the nearest hour
$start = floor($x / 3600) * 3600;
$end = ceil($y / 3600) * 3600;
// the number of hours between start and end
$hourCount = ($end - $start) / 3600;
for ($i = 0; $i < $hourCount; $i++) {
$hourStart = $start + $i * 3600;
$hourEnd = $hourStart + 3599;
$query = $Db->query("SELECT time FROM visits WHERE time>='$hourStart' AND time<='$hourEnd'");
$visitCount = $query->num_rows;
}
答案 0 :(得分:1)
这看起来像你想要完成的任务:
SELECT DAY(time), HOUR(time), * FROM visits
GROUP BY DAY(time), HOUR(time)
使用this链接,我相信您会发现如何解决您的问题! (只是不使用PHP方法,只有一个查询就足够了。)