2011-05-14 23 views
0

我有一個名爲submit_timestamp的列,它包含一個UNIX_TIMESTAMP(),我現在想要做的是做一個SELECT查詢並在WHERE子句中確保submit_timestamp等於或在X天數內。如何檢查MySQL查詢中是否等於或在X天內?

(只是演示用途):

SELECT id 
FROM submissions 
WHERE submit_timestamp = 'EQUALS OR IS WITHIN X NUMBER OF DAYS FROM submit_timestamp' 
     AND id = 2 

所有幫助表示讚賞。

謝謝。

回答

2

計算你想你構造查詢之前,比較在應用程序中的兩次。所有的編程語言都有一個函數來給你當前的時間戳(即在PHP中爲time())。要獲得「從現在開始的X天」,請在時間戳上添加60 * 60 * 24 * X秒。

SELECT id 
FROM submissions 
WHERE submit_timestamp >= $THE_CURRENT_TIMESTAMP 
     AND submit_timestamp <= ($THE_CURRENT_TIMESTAMP + 60*60*24*X) 
     AND id = 2 

現在你只是比較整數。與Johan的解決方案不同,MySQL將能夠在列上使用索引進行比較。

1
SELECT id 
FROM submissions 
WHERE FROM_UNIXTIME(submit_timestamp) 
    BETWEEN NOW() AND DATE_ADD(NOW(),INTERVAL 2 DAY) 
    AND id = 2; 

A BETWEEN B AND C確實A >= B AND A <= C
它只是通信:-)意圖更好

參見:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_from-unixtime

編輯 甚至更​​好:

SELECT id 
FROM submissions 
WHERE submit_timestamp BETWEEN UNIXTIMESTAMP() 
    AND unixtimestamp(DATE_ADD(NOW(),INTERVAL 2 DAY)) 
    AND id = 2; 

丹已正確地解釋說,這使得MySQL把上使用索引submit_timestamp,上面的代碼沒有。

注意UNIXTIMESTAMP()不帶參數的返回UNIXTIMESTAMP(NOW())
參見:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp

+0

我的知識NOW()以默認的MySQL格式返回當前時間,所以只是好奇你是否考慮過submit_timestamp是一個unix時間戳(沒有任何格式)? – newbtophp 2011-05-14 14:50:10

+1

@newbtophp:大概不是,但他的答案仍然+1。在閱讀mysql的日期時間函數後,根據需要調整查詢當然是在你的技能組中。 – 2011-05-14 15:10:47

+0

@Denis這給出了SQL錯誤 – newbtophp 2011-05-14 16:01:38

相關問題