Ich hab dir was zusammengestellt, damit du dein jetziges Datums-format nicht ändern musst.
Kosten dafür sind: statt einer Abfrage sind es nun drei Abfragen
Der Weg den ich gegangen bin ist folgender:
Statt das ganze in ein array auszugeben, damit du das "falsche" Datumsformat tt.mm.jjjj durchsuchen kannst, erzeugen wir einfach eine temporären Tabelle. Die ist schneller anzusprechen als ein array.
Felder der temporären Tabelle mit dem Namen
t_richtig sind:
der prim-key
id_richtig: der wird kopiert von deiner Tabelle mit den Terminen. Da ich nicht weiß wie diese Tabelle und der prim-key heißt, hab ich die Tabelle
t_datum und
id_datum, datum, info genannt, dass musst du halt noch ausbessern ;-)
und dem TIMESTAMP
datum: hierher kopieren wir dein Datum im richtigen Format
Die Temporäre Tabelle kannst du dann nach Lust und Laune durchsuchen.
und zur Vollständigkeit haben wir dann auch noch die Möglichkeit die Temporäre Tabelle zu löschen.
Soda, los gehts!
mit diesem sql-Befehl erzeugst du die temp. Tabelle
//************************************************************************
// db temporary tabelle (t_richtig) erzeugen
//************************************************************************
//CREATE TEMPORARY TABLE t_richtig (id_richtig INT NOT NULL AUTO_INCREMENT PRIMARY KEY, datum TIMESTAMP(8) NOT NULL);
Jetzt werden wir einfach die id und das datum von t_datum nach t_richtig spiegeln, wobei wir aber das Datums-Format ändern.
right, mid, und left zerlegen dir dein tt.mm.jjjj in jjjj und mm und tt
concat verbindet dann die drei Teile zu jjjjmmtt Timestamp(8) halt ;-)
//************************************************************************
// db t_datum spiegeln mit richtigem Datumsformat in temporary tabelle (t_richtig)
//************************************************************************
//INSERT INTO t_richtig (id_richtig, datum) SELECT id_datum, concat(right(datum,4),mid(datum,4,2),left(datum,2)) FROM t_datum;
die Temporäre Tabelle mit all den Daten ist erzeugt, jetzt können wir mal loslegen mit der Abfrage.
Wir suchen das Datum und die Info zum nächsten Event, der nach einem bestimmten Tag ($best_date) statt findet.
$best_date muss im Format jjjjmmtt sein.
Die Abfrage wird vielleicht nicht genau dem entsprechen, was du brauchst, aber mit wenig Info kann man halt nur allg. antworten
//************************************************************************
// db in temporary tabelle (t_richtig) suchen, welche ID die nächste ist nach dem bestimmten Datum ($best_date)
// mit einem INNER JOIN mit t_datum wo (ON) die IDs gleich sind
//************************************************************************
//SELECT d.info, date_format(r.datum,'%d.%m.%Y') AS datum FROM t_datum AS d INNER JOIN t_richtig AS r ON r.id_richtig = d.id_datum WHERE r.datum > '".$best_date."' LIMIT 1;
Ergebnis ist z.b:
Code:
+----------------------------+----------------+
| info | datum |
+----------------------------+----------------+
| dies ist die info zu... | 18.08.2003 |
+----------------------------+----------------+
So kannst du die temp. Tabelle wieder löschen
//************************************************************************
// db temporary tabelle (t_richtig) löschen
//************************************************************************
//DROP TABLE t_richtig;
Hättest du beim Datenbankdesign schon von Anfang an das richtige Format benutzt, wäre es einfacher gewesen. Aber so kannst du mal ausprobieren, wie man eine Temporäre Tabelle erzeugt, wie man eine Feldinhalt zerlegt und anders zusammenfügt und wie man eine ganze Tabelle spiegelt.
So, ich hoffe, geholfen zu haben.