[MYSQL] Alles ab Date-Time XY auslesen

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

bofh1337

Erfahrenes Mitglied
Ich sitze gerade vor einem kleinen Problem:

Ich habe in der DB Einträge mit einem "datetime"-Feld (zb. 2018-07-05 12:00:00). Jetzt will ich alles auslesen, was ab 5 Minuten in der Vergangenheit liegt, aber irgendo habe ich da einen Fehler in der Query:

$query->select('id')
->from('#__orw_carpool')
->where('time < DATE_ADD(DATE_FORMAT(NOW(), "%Y-%m-%d %H:%m:%s"), INTERVAL 5 MINUTE)');

Da wird entweder alles ausgelesen, oder nichts.
Wenn alles ausgelesen wird, dann sind da auch Einträge bei, die erst Morgen "ablaufen". Weiß da jemand weiter?
 
Warum machst du aus einem Datum (NOW()) zuerst einen String (DATE_FORMAT()) um anschliessend eine Datumsfunktion (DATE_ADD()) darauf anzuwenden?
Zudem ist time ein unglücklicher Feldname, da es auch ein SQL-Befehl ist. Darum sollte er in ` stehen, damit klar ist, dass es ein Feldname ist.

Zudem willst du 5 Minuten zu NOW() abziehen und nicht dazurechnen.

SQL:
`time` < DATE_ADD(NOW(), INTERVAL -5 MINUTE)
-- oder
`time` < DATE_SUB(NOW(), INTERVAL 5 MINUTE) 
-- oder
DATE_ADD(`time`, INTERVAL -5 MINUTE) < NOW()
 
Warum machst du aus einem Datum (NOW()) zuerst einen String (DATE_FORMAT()) um anschliessend eine Datumsfunktion (DATE_ADD()) darauf anzuwenden?
Zudem ist time ein unglücklicher Feldname, da es auch ein SQL-Befehl ist. Darum sollte er in ` stehen, damit klar ist, dass es ein Feldname ist.

Zudem willst du 5 Minuten zu NOW() abziehen und nicht dazurechnen.

SQL:
`time` < DATE_ADD(NOW(), INTERVAL -5 MINUTE)
-- oder
`time` < DATE_SUB(NOW(), INTERVAL 5 MINUTE)
-- oder
DATE_ADD(`time`, INTERVAL -5 MINUTE) < NOW()


Danke dir, das scheint zu laufen :)
Die Query sieht in Wirklichkeit so aus, ich habe hier nur die unwichtigen Sachen entfernt:

Code:
        $query->select($this->db->quoteName('id'))
            ->from($this->db->quoteName('#__orw_carpool'))
            ->where($this->db->quoteName('time') . ' < DATE_ADD(NOW(), INTERVAL -5 MINUTE)');

Wird also alles vom SQL-Layer escaped und gequotet ;-)
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge

Zurück