簡體   English   中英

顯示最近24小時的造訪次數,按小時細分

[英]Show number of visits in the last 24 hours, broken down by the hour

每當有人第一次訪問該站點時,我都會在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

林想使用這些數據來創建每小時訪問量。 因此,在上面的示例中,我將到達有2次訪問的第4小時,第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;
}

在我看來,這是合乎邏輯的……但是由於某種原因……它絕對不起作用。

你會怎么做?

怎么樣:

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

Hour(time) :“返回時間的小時。返回值的范圍是一天中的時間值,范圍是0到23”,

使用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方面,您將不得不“重構”完整的日期,因為此查詢只會為您節省時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM