Christian Seiler: richtiges datum

Beitrag lesen

Hallo,

Ich würde gerne immer ein Eintrag aus meiner DB ausgeben lassen. und zwar immer den, dessen Feld datum das das nächste richtig datum hat.

Also zb:

datum: 20.11.2007, 27.11.2007, 30.11.2007

und heute ist der 25.11.2007 dann sollte der 27.11.2007 erscheinen.

Hoffe ich konnte mein Problem verständlich erklären.

Wenn Du MySQL hast und das ein Feld vom Typ DATE, DATETIME oder TIMESTAMP ist, dann kannst Du das so machen:

SELECT * FROM tabelle WHERE datumsfeld >= CURDATE() ORDER BY datumsfeld ASC LIMIT 1

Das LIMIT 1 sorgt dafür, dass nur 1 Datensatz zurückgegeben wird, nämlich der nächste.

Wenn Du ein anderes DBMS benutzt, dann musst Du schauen, ob es auch etwas ähnliches wie LIMIT unterstützt (in Oracle gibt's z.B. ROWNUM). Wenn das nicht der Fall ist und Dein DBMS zumindest Subselects kann (dazu zählt auch MySQL 5), dann kannst Du folgende Abfrage verwenden:

SELECT * FROM tabelle WHERE datumsfeld = (SELECT MIN(datumsfeld) FROM tabelle WHERE datumsfeld >= CURDATE()) ORDER BY datumsfeld ASC

[Wobei CURDATE() durch die jeweilige "JETZT"-Funktion Deiner Datenbank zu ersetzen ist, das müsstest Du im Handbuch nachschlagen.]

Kleiner Hinweis: Beides liefert nicht unbedingt die gewünschten Resultate, wenn Du mehrere Datensätze mit dem gleichen Datum hast:

* Bei der LIMIT 1 Lösung wird ein zufälliger Datensatz zurückgegeben.
 * Bei der Subselect-Lösung werden alle Datensätze des gleichen Datums
   zurückgegeben.

Wenn Du dies vermeiden willst, füge auf jeden Fall bei ORDER BY noch ein weiteres Feld hinzu, was die Sortierreihenfolge dann eindeutig macht. Dann bekommst Du bei der Subselect-Lösung immer noch mehrere Datensätze, Du kannst Dich aber nur auf den ersten beschränken und alle anderen wegwerfen.

Viele Grüße,
Christian