2012-10-25 45 views
4

Iam試圖找出在las 5分鐘內是否將數據保存到數據庫。使用unix時間戳在最近5分鐘內選擇行

SELECT COUNT(id), DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i') 
FROM `table` 
WHERE `timestamp` >= CURRENT_TIMESTAMP - INTERVAL 5 MINUTE 

timestamp是unix時間戳(1970年以來的毫秒數)。

不工作,我得到的空num_rows而不是0,如果我用

if (!isset($resultHistory->num_rows) || !$resultHistory->num_rows) 

做動作,代碼不進入循環..

我也試過

SELECT COUNT(id), DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i') 
    FROM `table` 
    WHERE DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i') >= CURRENT_TIMESTAMP - INTERVAL 5 MINUTE 

回答

3

CURRENT_TIMESTAMP返回當前日期爲SQL TIMESTAMP,而不是一個UNIX時間戳,所以你必須使用unix_timestamp功能轉換:

SELECT COUNT(id), from_unixtime(`timestamp`/1000, '%Y-%m-%d %H:%i') 
FROM `table` 
WHERE `timestamp` >= unix_timestamp(CURRENT_TIMESTAMP - INTERVAL 5 MINUTE) * 1000 

編輯:

當你的timestamp列包含UNIX時間,你也將不得不使用from_unixtime來格式化日期。

EDIT2:

在MySQL UNIX時間的紀元以來的秒數(1/1/70),因此,如果您timestamp列中包含的毫秒數,你必須用1000,以及劃分數。

+0

嗨@ beny23,謝謝你的回覆。我已經嘗試過了。我認爲選擇是問題,我完全清空了表,並且仍然得到'$ result-> num_rows = 1',並且當我獲取對象'$ row = $ result-> fetch_object();'時,我得到null – devmonster

+0

@devmonster:我懷疑這是一個不同的問題,你是否直接在MySQL命令行工具中嘗試過查詢? – beny23

+0

謝謝,它的工作,你的解決方案是正確的。 – devmonster

1

你可以做這樣的:

SELECT COUNT(id), DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i') 
FROM `table` 
WHERE `timestamp` BETWEEN (DATE_SUB(NOW(),INTERVAL 5 MINUTE)) AND NOW() 
相關問題