Kalender / Unendliche Wiederholungen
Kalender / Unendliche Wiederholungen
am 12.05.2006 15:31:38 von nikolai.onken
Hallo,
ich habe eine Kalenderanwendung gebastelt und moechte auch unendlich of
wiederholende Events unterstuetzen (wie z.B. im Google Calendar).
Im moment Speichere ich jeden Eintrag als einzelne Zeile in der DB.
Das erzeugt unglaublich viele Eintraege ist aber einfach fuer SQL
Abfragen..
Mich wuerde interessieren wie z.B. Google Calendar die Daten speichert,
oder was es fuer Moeglichkeiten gibt um unendlich oft wiederholende
Events zu unterstuetzen.
Dazu kommt, dass einzelne Events Ausnahmen bilden koennen.
Gruss,
Nikolai
Re: Kalender / Unendliche Wiederholungen
am 12.05.2006 15:46:06 von Bernhard Graeuler
Nikolai Onken wrote:
> ich habe eine Kalenderanwendung gebastelt und moechte auch unendlich of
> wiederholende Events unterstuetzen (wie z.B. im Google Calendar).
> Im moment Speichere ich jeden Eintrag als einzelne Zeile in der DB.
Hi,
Vorschlag: Speichere zu jedem Eintrag ein Wiederholungsstart- und ein
Ende Datum, und dazu noch die Frequenz, also alle wie viel Tage,
wöchentlich, was auch immer.
Wenn das Wiederholungsstart- oder ende datum null ist läuft der Eintrag
bis unendlich, oder/und seit unendlich. Für Termine ohne Wiederholungen
sind das Start- und das Endedatum identisch und liegen an dem Tag an dem
der Termin anfängt.
Für das im Kalender gerade angezeigte Zeitfenster musst Du dann zuerst
alle Einträge finden, deren Wiederholungs- mit dem Anzeigezeitraum
überlappt, und dann je nach eingestellter Wiederholungsfrequenz die Tage
ausrechnen, an denen der Termin stattfindet.
Gruß
Bernhard
Für das im Kalender angezeigte Zeitfenster musst Du dann
Re: Kalender / Unendliche Wiederholungen
am 12.05.2006 15:56:09 von nikolai.onken
Hallo Bernhard,
danke fuer die Antwort!
Wie wuerdest du dann mit Ausnahmen umgehen? Sagen wir ich habe einen
unendlichen event jeden ersten Montag im Monat, mit ausnahme am 08.05
wo der event auf den 09.05 verschoben wurde.
Ist es dann am besten um eine Extra Tabelle einzurichten mit allen
Ausnahmen? Wie weiss ich dann, dass sich die Ausnahme auf den 08.05 und
nicht auf den 15.05 bezieht? (Da ich ja nicht mehr jeden Event einzeln
abspeichere)
Viele Gruesse,
Nikolai
Re: Kalender / Unendliche Wiederholungen
am 12.05.2006 16:30:49 von Bernhard Graeuler
Nikolai Onken wrote:
> Hallo Bernhard,
>
> danke fuer die Antwort!
> Wie wuerdest du dann mit Ausnahmen umgehen? Sagen wir ich habe einen
> unendlichen event jeden ersten Montag im Monat, mit ausnahme am 08.05
> wo der event auf den 09.05 verschoben wurde.
> Ist es dann am besten um eine Extra Tabelle einzurichten mit allen
> Ausnahmen? Wie weiss ich dann, dass sich die Ausnahme auf den 08.05 und
> nicht auf den 15.05 bezieht? (Da ich ja nicht mehr jeden Event einzeln
> abspeichere)
> Viele Gruesse,
>
> Nikolai
>
Mh.
Entweder man frickelts:
Dann könnte man einfach für die Ausnahme eine Art "Ausnahmetermin"
anlegen, der sich am Tag des ausfallenden Regeltermin zeitlich exakt
überlappt.
Oder man macht es vernünftig (wie Du es schon vorgeschlagen hast):
Man legt eine extra Tabelle mit den Ausnahmen an. Über einen Join
bekommt man dann alle Termine mit ihren jeweiligen Ausnahmen. Dann
rechnet man die im Zeitfenster liegenden Einzeltermine aus, und zieht
die verknüpften Ausnahmen wieder ab.
Gruß
Bernhard
Re: Kalender / Unendliche Wiederholungen
am 12.05.2006 16:45:39 von nikolai.onken
Ist folgendes auch eine 'gute' Moeglichkeit?:
ich habe einen vereinfachte Tabelle mit folgenden Feldern:
id
date_start
date_end
interval
identifier
Ein Termin der unendlich oft durchlaeuft sieht dann so aus:
1
''
2005-03-01
'+ 5 DAY'
1
Jetzt moechte ich am 06.03 den Termin verschieben. Waere es dann
sinvoll den einen Termin in drei aufzuteilen?:
1
2005-03-01
2005-03-01
'+ 5 DAY'
1
2
2005-03-07
2005-03-07
'+ 5 DAY'
1
3
2005-03-11
''
'+ 5 DAY'
1
Die Frage die bleibt (ich habs noch nicht probiert):
Kann ich auf diese Weise einfache DB Abfragen gestalten und alle
moeglichen relationen von Events abfragen?
Wie wuerde in so einer Struktur z.B. die Abfrage aussehen um alle Daten
von Maerz bis Oktober 2005 abzufragen?
Viele Gruesse,
Nikolai
Re: Kalender / Unendliche Wiederholungen
am 12.05.2006 16:45:42 von Bernhard Graeuler
Bernhard Gräuler wrote:
> Nikolai Onken wrote:
>> Hallo Bernhard,
>>
>> danke fuer die Antwort!
>> Wie wuerdest du dann mit Ausnahmen umgehen? Sagen wir ich habe einen
>> unendlichen event jeden ersten Montag im Monat, mit ausnahme am 08.05
>> wo der event auf den 09.05 verschoben wurde.
>> Ist es dann am besten um eine Extra Tabelle einzurichten mit allen
>> Ausnahmen? Wie weiss ich dann, dass sich die Ausnahme auf den 08.05 und
>> nicht auf den 15.05 bezieht? (Da ich ja nicht mehr jeden Event einzeln
>> abspeichere)
>> Viele Gruesse,
>>
>> Nikolai
>>
> Mh.
>
nochmal Mh...
Änderungen an den Einzelterminen, beispielsweise in einem Notizfeld auch
nicht so tatsächlich nicht gut möglich. Die müsste man dann ebenfalls
zusätzlich speichern...
.... könnte man natürlich auch grundsätzlich zusätzlich speichern:
In Tabelle 1 speichert man nur die Basisinfos für den Termin:
- TerminID
- Start der Wiederholungen, Ende der Wiederholungen,
- Wiederholfrequenz
- Start- und Ende Uhrzeit
- Weitere Felder
In Tabelle 2 legt man die Ausnahmen für die jeweiligen Einzeltermine ab.
- Tab1.TerminID
- Ersetzt Termin am
-> Datum nach aufgelösten Wiederholungen
- neues Start- und Endedatum
-> Für diesen einen Termin, falls geändert.
- neue Start- und Ende Uhrzeit
-> Für diesen einen Termin, falls geändert.
- Flag: Fällt aus = true / false
- Weitere Felder
-> Diese "überschreiben" jeweils den Inhalt im Wiederholungstermin,
falls sie dort auch verfügbar sind. Am einfachsten wahrscheinlich
mit identischen Feldnamen in Tabelle1 und Tabelle2 für die weiteren
Felder zu lösen.
Nun einen Join über die beiden Tabellen für das anzuzeigende
Zeitfenster, im Programm die Ausnahmen in die berechneten Regeltermine
einpflegen und das wars dann schon. :)
Tjo. Nun muss man sich noch Gedanken darüber machen, was passiert, wenn
sich ein Wiederholungstermin ab einem bestimmten Datum ändert. Also bis
1.6.2006 war er immer Donnerstags, danach für die Zukunft verschoben auf
Freitag.
Für den Fall würde ich vorschlagen den Termin zu teilen, und für ab den
2.6.2006 einen neuen Wiederholungstermin anzulegen.
Steckt ne Menge mehr Arbeit drin, als man so zuerst vermutet...
Viel Spaß dabei!
Gruß
Bernhard