MySQL: Vom aktuellen Datum ausgehend bestimmtes Intervall berechnen
In vielen Fällen wird man eine Tabelle in der Datenbank haben, in der ein Datum als Typ DATE gespeichert ist. Von einem bestimmten Datum ausgehend, zum Beispiel vom aktuellen, will man nun alle Einträge anzeigen lassen, die 14 Tage, 1 Monat, 1 Jahr usw. zurückliegen. Man kann dies natürlich wie so oft auf verschiedene Weisen lösen, unter anderem mit Hilfe vom Timestamp (Zeitstempel). In diesem Post möchte ich aufzeigen, wie man eine solche MySQL Abfrage mit der Funktion CURRENT_DATE und INTERVAL realisieren kann.
Angenommen wir haben eine Tabelle „entries“ mit den drei Feldern id, name, posted_at. Das Feld id ist ein Autoinkrement, das Feld name ein VARCHAR(255) und in unserem letzten Feld posted_at (Typ DATE) wird unser Datum gespeichert, an dem der Datensatz angelegt bzw. generiert wurde. Jetzt möchten wir in einer Abfrage alle Einträge suchen, die vor frühstens 14 Tagen oder später eingetragen wurden. Um das Intervall möglichst flexibel zu halten und nur die Anzahl der Tage als Parameter an die Funktion zu übergeben, gehen wir vom aktuellen Datum aus, nämlich CURRENT_DATE.
Unser SQL-Query wäre dann zum Beispiel:
1 2 3 4 5 |
mysql_query(" SELECT id, name FROM entries WHERE posted_at > CURRENT_DATE - INTERVAL 14 DAY ORDER BY posted_at DESC "); |
Vom aktuellen Datum müssen wir noch mit Hilfe der Funktion „INTERVAL“ die 14 Tage abziehen. So erhalten wir bei Ausführung zu jeder Zeit nur die Einträge, die vom aktuellen Datum ausgehend maximal 14 Tage in der Vergangenheit liegen. In unserem PHP Script können wir später die Tage dann sehr bequem per Parameter übergeben und so uneingeschränkt das Intervall beliebig vergrößern oder verkleinern:
1 2 3 4 5 6 |
$days = $_GET['search']; mysql_query(" SELECT id, name FROM entries WHERE posted_at > CURRENT_DATE - INTERVAL ".$days." DAY ORDER BY posted_at DESC "); |
Anmerkung: In diesem kleinen Tutorial wird nicht auf die potentiellen Gefahren wie zum Beispiel SQL Injections eingegangen. Die GET-Parameter sollte man zum Beispiel korrekt absichern, damit kein fremder Code in die Abfrage eingeschleust werden kann.
Die letzten Kommentare