Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Kalender - sich wiederholende Termine auslesen?!

Hallo allerseits,

ich arbeite derzeit an einem kleinen Kalender, in den man ToDo Elemente oder sonstige Daten eintragen kann - zb am 24.12.2007 ist Weihnachten. Mein Problem ist nun, dass man idealerweise auch Wiederholungen einstellen kann - Weihnachten ist schließlich jedes Jahr :). Hier meine Datenbank Tabelle, die ich etwas vereinfacht habe:

Code:                   In Zwischenablage kopieren (nur IE)
1">

Die Spalte Wiederholung gibt an, in welchem Intervall sich die Einträge wiederholen. 0 steht für keine Wiederholung, 1 für Wiederholung und 2 für wöchentliche Wiederholung.

Ich bin nun bereits soweit, dass ich einen Tag abfragen kann und für diesen Tag alle gültigen sich wiederholenden Einträge auslesen kann. Die SQL Abfrage dazu sieht (vereinfacht) so aus:
Code:                   In Zwischenablage kopieren (nur IE)
2">

Die Variable $DATUM ist ein Datum im Format YYYY-MM-DD - zb des heutigen Tages.

Was aber, wenn ich alle Elemente innerhalb eines Zeitraums auslesen möchte? Beispielsweise alle Elemente eines Monats oder einer Woche. Für einen Monat hätte ich nach meiner Methode bereits max 31 Abfragen - jeden Tag abfragen - und das halte ich für wenig sinnvoll :/. Ich müsste, bei wöchentlichen Wiederholungen, den gleichen Datensatz zb 4 mal pro Monat lesen - geht sowas überhaupt?!

Habt Ihr irgendwelche Ideen, Tipps, Verbesserungsvorschläge oder würdet sogar die Tabellenstruktur ändern?!

Bin auf die Antworten gespannt :)

Gruß & Danke
Eike

Zur Info: Ich verwende PHP 4.x und MySQL 5.0.15
Hier gehts zum Orginal Eintrag "Kalender - sich wiederholende Termine auslesen?!" im Forum

Antworten

Hi

Ich würde eine Kalender Tabelle so aufbauen
Code:                   In Zwischenablage kopieren (nur IE)
3">

Bei einem Eintrag '24.12.2007', '12:00:00', '24.12.2020', '14:00:00', 'jahr', 'Weihnachtsessen'

müssen alle 24.12. zwischen 2007 und 2020 von 12-14 belegt werden

Das Ereignis
Code:                   In Zwischenablage kopieren (nur IE)
4">

Damit erzeugst du gleich beim Eintragen in die Kalender Tabelle alle erforderlichen Einträge lt. Benutzereingabe.
Wiederholungen sind an der id_parent ungleich 0 zu erkennen.

Ob das Ereignis '5' Wiederholungen hat oder nicht findest du mit
Code:                   In Zwischenablage kopieren (nur IE)
5">

heraus: bei 0 gibt es keine Wiederholungen, sonst schon.


Auslesen aller Ereignisse eines Zeitraumes ist dann einfach
Code:                   In Zwischenablage kopieren (nur IE)
6">

mit den Variablen im Format JJJJ-MM-TT


2.

Danke für den guten Vorschlag. So in etwa hatte ich mir das zu erst auch überlegt - einfach Wiederholungen jedes Mal eintragen. Die INSERT Abfrage dazu ist übrigens super - wäre ich so nicht drauf gekommen.

Nur stell dir mal vor, ich möchte jeden Wochentag (Mo - Fr) einen Eintrag haben. Jeden Mo bis Fr 22.15 Uhr TV Total gucken z.B. und das für die nächsten 5 Jahre. Dann hätte ich im Endeffekt ca. 1300 Einträge - nur für diesen Event. Auch wenn ich überlappende Felder (zb Notiz "TV Total gucken") in eine zweite Tabelle auslagere, um die Notizen nicht mehrfach gespeichert zu haben, wird die Datenbank nach ein paar Einträgen zu groß - relativ zum Sinn gesehen.

Ich kenne mich in der MySQL internen Verarbeitung nicht besonders aus, aber meinst du nicht, dass das ganze dann mit der Zeit etwas langsam und zugemüllt wird? Oder kann man das vernachlässigen?

Danke! und Gruß


3.

Zitat:
osterix postete
DATE_ADD('2004-12-24' INTERVAL x YEAR)
Übrigens: Erzeugt dieser Teil dann automatisch mehrere Einträge, obwohl man nur 1 INSERT Befehl ausführt?!


4.

Hi

Mo-Fr, wöchentlich, 5 Jahre ergibt das einen Sinn?

Aber egal: ein paar 10.000 Rows in einer Tabelle, die über die relevanten Spalten indexiert ist, um die Suchvorgänge zu beschleunigen, sind nicht wirklich problematisch.

Du kannst ja auch abgelaufene Ereignisse regelmässig löschen oder in eine analog aufgebaute Archiv Tabelle auslagern.

Ich würde die Notiz nicht auslagern, quasi einmal 'TV Total gucken' für alle 1300 eigentlichen Termine. Die 'mehrfach' Speicherung ermöglicht dir ja auch bei jedem Ereignis eine Erweiterung der Notiz vorzunehmen.


5.

Zitat:
kekster postete
Zitat:
osterix postete
DATE_ADD('2004-12-24' INTERVAL x YEAR)
Übrigens: Erzeugt dieser Teil dann automatisch mehrere Einträge, obwohl man nur 1 INSERT Befehl ausführt?!
Nein. Das x steht für 1,2,3,4.....


6.

Zitat:
osterix postete
Das x steht für 1,2,3,4.....
Klingt sinnvoll :)

Werde es dann wohl umsetzen, wie von dir vorgeschlagen. Danke dir.

Gruß


Hier gehts zum Orginal Eintrag "Kalender - sich wiederholende Termine auslesen?!" im Forum
 
phpforum.de | Impressum