Mailinglisten-Archive |
> hackfrag at ff-scene.de wrote:
>> Guten Morgen,
>> ich programmier hier gerad ein Termin Kalender.
>> Nun hab ich folgendes Problem, ich möchte das man beim eintragen von
>> Terminen sagen kann das sich dieser Termin wiederholt (
>> täglich,wöchentlich,monatlich,jährlich ).
>> Nun hab ich das folgendermaßen gelöst:
>>
>> - Termin wird eingetragen am 6.Oktober 2003
>> (Termin wiederholt sich jede Woche Montag)
Vielleicht hilft dieser Ansatz eines SQL Queries:
Feld Repetition:
1 == Wiederholung an jedem Wochentag X
2 == Wiederholung an jedem Tag X im Monat
3 == Wiederholung jählich am Tag X des Monats Y
4 == Wiederholung Vierteljährlich an Tag X
5 == Einzelner Termin, keine Wiederholung
6 == Wiederholung an jedem Wochentag
7 == Wiederholung Halbjährlich
(... Erweitern nach belieben)
$datum beinhaltet ein Syntaktisch korrektes Datum im Format YYYY-MM-DD
Die Tabellenfelder "start" und "ende" sind im datetime Format
Nur so als Beispiel:
SELECT appTitel, appId,
UNIX_TIMESTAMP(start) AS date_starts,
UNIX_TIMESTAMP(ende) AS date_ends
FROM termine
WHERE
(start LIKE '".addslashes($datum)."%."' or
(
start <= '".addslashes($datum)." 00:00:01' and
repetition = '1' and
DAYOFWEEK(start) = DAYOFWEEK('".addslashes($datum)."')
) or (
start <= '".addslashes($datum)." 00:00:01' and
repetition = '2' and
DAYOFMONTH(start) = DAYOFMONTH('".addslashes($datum)."')
) or (
start <= '".addslashes($datum)." 00:00:01' and
repetition = '3' and
(
MONTH(start) = MONTH('".addslashes($datum)."') and
DAYOFMONTH(start) = DAYOFMONTH('".addslashes($datum)."')
)
) or (
start <= '".addslashes($datum)." 00:00:01' and
repetition = '4' and
(
DAYOFMONTH(start) = DAYOFMONTH('".addslashes($datum)."') and
MONTH(start)%4 = MONTH('".addslashes($datum)."')%4
)
) or (
start <= '".addslashes($datum)." 00:00:01' and
repetition = '5'
) or (
start <= '".addslashes($datum)." 00:00:01' and
repetition = '6' and
DAYOFWEEK('".addslashes($datum)."') >= '2' and
DAYOFWEEK('".addslashes($datum)."') <= '6'
) or (
start <= '".addslashes($datum)." 00:00:01' and
repetition = '7' and
(
DAYOFMONTH(start) = DAYOFMONTH('".addslashes($datum)."') and
MONTH(start)%6 = MONTH('".addslashes($datum)."')%6
)
)
) [and|or] [.. Weitere Konditionen]
ORDER BY UNIX_TIMESTAMP(ende) - UNIX_TIMESTAMP(start) DESC
In dem Fall trägt man nur den ersten Termin ein und ein zweites Feld
gibt an um welchen Wiederholungstyp es sich handelt. s.o.
Gruß
-boris
php::bar PHP Wiki - Listenarchive