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