Select fürKalender mit Wiederholungen
am 28.01.2006 05:27:24 von Frank-Thomas Hellwig
Hallo,
ich tue mir grade schwer mit folgender Aufgabe. In einer Datenbank ist
ein Termin hinterlegt, meinetwegen am 2006-02-06. Dieser Termin soll
alle 14 Tage stattfinden. Dieses Intervall ist auch in der Tabelle.
Mit php baue ich einen Kalender auf und möchte nun bei jedem Tag die
Termine aus der DB lesen, die zu dem Tag gehören. Am 20. Februar müÃte
dann der o.g. Termin ermittelt werden.
Mit welchem Select schaffe ich das (oder welches Datenmodell müÃte ich
zugrundelegen, damit es klappt)?
GruÃ, F.T.
Re: Select für Kalender mit Wiederholungen
am 29.01.2006 02:50:40 von Markus Popp
Hallo,
was mir spontan einfällt: mit to_days(datum) kannst Du ein Datum in eine
fortlaufende Zahl umwandeln (z. B. 2006-01-29 = 732705, 2006-01-30 = 732706
usw.).
Willst Du zum Beispiel abchecken, ob der 20.02.2006 eine Wiederholung der
14-Tage-Intervalle ist, kannst Du abfragen:
SELECT IF((to_days('2006-02-20') - to_days('2006-02-06')) % 14 = 0, 1, 0);
.... dies ergibt 1 (= ja), weil der 20.02.2006 ein "Nachfolger ist". Beim
19.02.2006 ergibt's demnach 0 (= nein).
In diesem Fall kommt auch 1 heraus, wenn das zu prüfende Datum vor dem
Original-Datum liegt. Um nur nachfolgende Datumswerte zuzulassen, kann man
schreiben
SELECT IF((to_days('2006-02-20') - to_days('2006-02-06')) % 14 = 0 and
to_days('2006-02-20') > to_days('2006-02-06'), 1, 0);
Mit einer MySQL-Version > 5.0 bietet sich das natürlich gut für eine User
Defined Function an, sodass man nur mehr die zu prüfenden Datumswerte sowie
den Intervall als Parameter übergibt und einen Rückgabe erhält, welcher
Auskunft gibt, ob das Datum innerhalb des Intervalls liegt oder nicht.
Markus
Re: Select für Kalender mit Wiederholungen
am 29.01.2006 03:31:47 von Markus Popp
Hallo nochmals,
die Frage hat mich inspiriert, darüber einen Artikel in meinem Blog zu
schreiben (mit einem ausführlicheren Beispiel):
http://db4free.blogspot.com/2006/01/how-to-deal-with-repeati ng-date.html
Markus
Re: Select fürKalender mit Wiederholungen
am 25.02.2006 17:37:58 von Frank-Thomas Hellwig
Hallo Markus,
ich bin erst jetzt dazu gekommen, mir Deine Lösungen anzuschauen. Hat
wirklich genau wie gewollt funktioniert. Super-Hilfe!
Vielen Dank,
F.T.