MySQL-Befehl richtig?
Nadja
- datenbank
Hallo,
habe folgenden MySQL-Befehl gebastelt
SELECT
*
FROM
hb_newsletter_ex
WHERE UNIX_TIMESTAMP('".date('Y-m-d',time())." 00:00:00')+1000*60*60*24*13 > ".time()."
AND UNIX_TIMESTAMP(showdatum) >= UNIX_TIMESTAMP('".date('Y-m-d',time())." 00:00:00')
ORDER BY
showdatum ASC
Der funktioniert auch - jedenfalls kommt kein Fehler raus.
Der Code soll alle Einträge "showdatum" ausgeben, die innerhalb der nächsten 13 Tage ab heute liegen.
Kann mir jemand sagen, ob das richtig ist bzw. kann mir das jemand korrigieren?
1000 Dank,
Nadja
Halihallo Nadja
SELECT
*
FROM
hb_newsletter_ex
WHERE UNIX_TIMESTAMP('".date('Y-m-d',time())." 00:00:00')+1000*60*60*24*13 > ".time()."
AND UNIX_TIMESTAMP(showdatum) >= UNIX_TIMESTAMP('".date('Y-m-d',time())." 00:00:00')
ORDER BY
showdatum ASC
Warum soviele Konvertierungen und Vermischungen mit PHP?
Der Code soll alle Einträge "showdatum" ausgeben, die innerhalb der nächsten 13 Tage ab heute liegen.
http://www.mysql.com/doc/en/Date_and_time_functions.html
DATE_ADD(showdatum, INVERVAL 13 DAYS)
ist wesentlich effizienter, als die Daten (pl. Datum) zu konvertieren und die von PHP
generierten Strings zu parsen bzw. erst zu erstellen.
Zudem: Das aktuelle Datum ist die Funktion NOW() in MySQL. Du brauchst das aktuelle Datum
nicht über PHP's "date" zu erstellen.
Kann mir jemand sagen, ob das richtig ist bzw. kann mir das jemand korrigieren?
Der erste WHERE-Teil ist völlig redundant, da
UNIX_TIMESTAMP('".date('Y-m-d',time())." 00:00:00')+1000*60*60*24*13 > ".time()."
stehts wahr ist. Heute in 13 Tagen wird immer grösser sein, als heute. Dies würde
lediglich Sinn machen, wenn du ".time()." durch UNIX_TIMESTAMP(showdatum) ersetzen
würdest.
Folglich:
WHERE
showdatum <= DATE_ADD(showdatum, INTERVAL 13 DAYS) AND
showdatum >= NOW()
Basta.
Viele Grüsse
Philipp
Hi,
vielen lieben Dank ... wußte nicht, dass es mit MySQL auch so geht.
N.