2016-03-22 69 views
1

我們使用以下更新的SQL從我們的db獲取客戶列表,我們在3天之前發送SMS。獲取特定日期之前的所有行

SELECT * FROM sms WHERE sent_time >= NOW() - INTERVAL 3 DAY; 

sms是用0缺省值或上次發送的時間sent_time柱沿每日更新。

有些行的值爲sent_time = 0,但上述腳本沒有獲取行。

什麼是正確的SQL?

早些時候,我們使用的PHP的SQL就像下面提到:

$vTime = time() - (60*60*24*3); 
$sql = "SELECT * FROM sms WHERE $vTime <= sent_time"; 
+1

你是大於0的選擇值,可以肯定的你永遠不會得到sent_time 0 ...添加「OR sent_time = 0」 – Salketer

回答

1

功能NOW()將返回當前日期和時間,但我可以看到你之前使用過PHP time(),它返回一個Unix-Timestamp。 SQL的等價物是UNIX_TIMESTAMP()

語法UNIX_TIMESTAMP()

SELECT * FROM sms WHERE sent_time >= UNIX_TIMESTAMP() - (60*60*24*3); 

語法UNIX_TIMESTAMP(date)

SELECT * FROM sms WHERE sent_time >= UNIX_TIMESTAMP(NOW() - INTERVAL 3 DAY) OR sent_time = 0 
0

只需更改選擇查詢..

SELECT * FROM sms WHERE sent_time >= DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW(); 
1

NOW() - INTERVAL 3 DAY;返回datetime而echo time() - (60*60*24*3);返回一個時間戳。

如果您的數據庫列是一個時間戳,你的MySQL測試不會有任何效果,用這個來代替:

SELECT * FROM sms WHERE sent_time >= UNIX_TIMESTAMP(NOW() - INTERVAL 3 DAY) 
0

嘗試以下:

SELECT * FROM sms WHERE sent_time <= DATE_SUB(NOW(), INTERVAL 3 DAY) OR sent_time=0; 
相關問題