2016-03-22 14 views
1

私たちは3日前にSMSを送信したdbから顧客リストを取得するために、以下の更新されたSQLを使用しています。特定の日の前にあるすべての行を取得する

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

、それは確かですあなたはsent_time 0になることは決してありません... "OR sent_time = 0" – Salketer

答えて

1

機能NOW()は、現在の日付と時刻を返しますが、私ができるようになりますPHP time()を使用したことを確認してください。これはUnixタイムスタンプを返します。 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;

echo time() - (60*60*24*3);タイムスタンプを返しながらDATETIMEを返します。

データベースのカラムがタイムスタンプである場合は、MySQLのテストではなく、これを使用し、働くことは決してありません:

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

以下試してください:あなたは0よりも高い値を選択している

SELECT * FROM sms WHERE sent_time <= DATE_SUB(NOW(), INTERVAL 3 DAY) OR sent_time=0; 
関連する問題