2015-09-07 85 views
2

這是我的查詢:如何從PHP中的數據庫中每天以時間戳記每6小時計數一次數據組?

$sql = "SELECT DATE(pm_timestamp) AS d, HOUR(pm_timestamp) AS h, 
     COUNT(*) AS c FROM pm_impr_tracker WHERE campaign_id = '$camp_id' GROUP BY h,d order by `pm_timestamp`"; 

這給每個小時的數據,但每頁6個小時,我想。 我的結果:

d  h c 
2015-08-23 6 6 
2015-08-23 7 11 
2015-08-23 8 26 
2015-08-23 9 57 
2015-08-23 10 36 
2015-08-23 11 19 
2015-08-23 12 21 
2015-08-23 13 18 
2015-08-23 14 18 
2015-08-23 15 17 
2015-08-23 16 107 
2015-08-23 17 55 
2015-08-24 8 26 
2015-08-24 9 57 
2015-08-24 10 36 
2015-08-24 11 19 
2015-08-24 12 21 
2015-08-24 13 18 
2015-08-24 14 18 
+1

我建議這個寫一個存儲過程,只傳遞的參數,但是這當然取決於你的數據庫。 – Robert

+0

'$ camp_id'源自用戶輸入嗎?如果是這樣,請注意這裏的SQL注入。如果可以的話,考慮使用參數綁定。 – halfer

回答

1

的代碼,你按小時發佈組的記錄。如果你需要按6​​小時的時間間隔進行分組,那麼你所要做的就是讓h成爲當天6小時組的數量。例如,h = 0是小時0..5(即0和5之間的小時(pm_timestamp)),h = 1小時爲6..11等。

如果您將小時除以6並忽略餘數,則可以輕鬆實現。這就是MySQL DIV operator所做的。

查詢是:

SELECT DATE(pm_timestamp) AS d, 
    HOUR(pm_timestamp) DIV 6 AS h, 
    COUNT(*) AS c 
FROM pm_impr_tracker 
WHERE campaign_id = '$camp_id' 
GROUP BY h, d 
+1

謝謝你的回答改善幫助我...... –

相關問題