Ik heb een agenda table, met daarin events die bijv maandelijks, wekelijks of dagelijks worden herhaald.
Omdat ik dus voor een event dat bijv dagelijks herhaald wordt geen 365 rows wil toevoegen aan de db wil ik dus dat wanneer ik een SELECT query doe, dat ik dan voor elke dag in de periode tussen date_start en date_end een result row teruggegeven wordt.
Nu heb ik de onderstaande query gevonden, hier kan ik dagen mee genereren tussen een bepaalde periode, en dus is me probleem mbt de dagelijks herhaalde events opgelost. maar nu wil ik deze query ook gebruiken voor de wekelijkse herhalingen, dus om de 7 dagen, alleen om deze query aan te kunnen passen, moet ik deze query begrijpen, maar ik begrijp eerlijk gezegd niet echt wat er gebeurd.
Of eventueel andere suggesties hoe dit helemaal anders te programmeren is? En nee, een for/while/loop in php is geen oplossing...
event_id | date_start | date_end | event_repeat |
---|---|---|---|
1 | 2010-03-13 | 2010-07-20 | weekly |
Omdat ik dus voor een event dat bijv dagelijks herhaald wordt geen 365 rows wil toevoegen aan de db wil ik dus dat wanneer ik een SELECT query doe, dat ik dan voor elke dag in de periode tussen date_start en date_end een result row teruggegeven wordt.
Nu heb ik de onderstaande query gevonden, hier kan ik dagen mee genereren tussen een bepaalde periode, en dus is me probleem mbt de dagelijks herhaalde events opgelost. maar nu wil ik deze query ook gebruiken voor de wekelijkse herhalingen, dus om de 7 dagen, alleen om deze query aan te kunnen passen, moet ik deze query begrijpen, maar ik begrijp eerlijk gezegd niet echt wat er gebeurd.
SQL:
1
2
3
4
5
6
7
8
| select a.Date from ( select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY as Date from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c ) a where a.Date between '2010-01-20' and '2010-8-24' |
Of eventueel andere suggesties hoe dit helemaal anders te programmeren is? En nee, een for/while/loop in php is geen oplossing...