2016-03-22 19 views
1

Wir verwenden die unten aktualisierte SQL, um Kundenliste von unserer db, die wir SMS vor 3 Tagen senden.Holen Sie sich alle Zeilen vor einem bestimmten Tag

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

Die Tabelle sms wird täglich mit Standardwert von 0 oder die zuletzt gesendeten Zeit zusammen mit der sent_time Spalte aktualisiert.

Es gibt Zeilen mit dem Wert sent_time = 0, aber vom obigen Skript wird keine Zeile abgerufen.

Was ist das korrekte SQL?

Früher waren wir mit den SQL mit php wie unten erwähnt:

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

Sie Auswählen von Werten höher als 0 ist, ist es sicher, dass du niemals sent_time 0 bekommen wirst ... "OR sent_time = 0" hinzufügen – Salketer

Antwort

1

Die Funktion NOW() wird das aktuelle Datum und die Uhrzeit zurück, aber ich kann Sie sehen, dass Sie zuvor PHP time() verwendet haben, was einen Unix-Timestamp zurückgibt. Das SQL-Äquivalent ist UNIX_TIMESTAMP().

Syntax UNIX_TIMESTAMP()

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

Syntax UNIX_TIMESTAMP(date)

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

Wählen Sie einfach Abfrage ändern ..

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

NOW() - INTERVAL 3 DAY; gibt einen DATETIME- während echo time() - (60*60*24*3); einen Zeitstempel zurück.

Wenn Ihre Datenbankspalte ist ein Zeitstempel, MySQL-Test wird nie funktionieren, verwenden Sie stattdessen:

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

unten Versuchen:

SELECT * FROM sms WHERE sent_time <= DATE_SUB(NOW(), INTERVAL 3 DAY) OR sent_time=0; 
Verwandte Themen