显示过去24小时内的访问次数,按小时分列

时间:2009-08-02 11:44:11

标签: php mysql

每当有人第一次访问该网站时,我都会在mysql表中存储一个时间戳。

我最终得到的数据如下:

2009-08-02 04:08:27
2009-08-02 04:07:47
2009-08-02 05:58:13
2009-08-02 06:28:23
2009-08-02 06:34:22
2009-08-02 08:23:21
2009-08-02 09:38:56

我想要对这些数据做什么是创建每小时的访问次数。所以在上面的例子中,我将在第4小时到达2次访问,第5小时= 1小时,第6小时2小时,第8小时1等。

我认为最好的方法就是这样做一个for语句:

// a 24 hour loop
for($i = 24; $i > -1; $i--) {

    // the query for each hour
    $sql = 'SELECT * FROM visits WHERE (DATE(added) = DATE_SUB(CURRENT_DATE(), INTERVAL ' . $i . ' HOUR))'

$res = mysql_query($sql);
$count = mysql_num_rows($res);  


    // store the number of rows for this loop in the array
    $visits[] = $count;
}

这对我来说似乎合乎逻辑......但出于某种原因......它绝对不起作用。

你会怎么做?

2 个答案:

答案 0 :(得分:6)

怎么样:

SELECT hour(added), count(*) 
FROM visits 
WHERE added >= CURRENT_DATE()-1
GROUP BY hour(added)

Hour(time):“返回时间的小时。对于时间值,返回值的范围是0到23”,

答案 1 :(得分:2)

如果只使用group by子句在一个查询中执行该操作呢?

这样的事可能会这样做:

select HOUR(added), count(*) as nbr
from visits
where added between '2009-07-14' and '2009-07-15'
group by HOUR(added)
order by HOUR(added)

(当然,您可能需要调整一些事情,比如日期)

这将使您的数据库服务器更适合该查询而不是您提议的其他查询...但只有一个查询,而不是24 - 这是一件好事。
另一方面,从数据库服务器到PHP服务器的数据较少;这很棒,特别是如果桌子很大的话!

然后,在PHP方面,你将不得不“重建”完整的日期,因为这个查询只能为你提供时间。