Я ищу несколько советов по лучшей практике для календаря, использующего повторяющиеся события.
Допустим, у меня есть таблица 'событие' с полями
id
info
и другой таблица 'event_meta' с полями
id
event_id
start_date
end_date
interval
Я могу создать повторяющееся событие следующим образом
event:
id | info
---------------
1 | some info
event_meta
id | event_Id | start_date | end_date | interval |
--------------------------------------------------
--------------------------------------------------
1 | 1 | 2020-01-01 |2020-01-30| 7 |
--------------------------------------------------
1 | 1 | 2020-01-03 |2020-01-30| 7 |
--------------------------------------------------
1 | 1 | 2020-01-05 |2020-01-30| 7 |
--------------------------------------------------
Это повторяется каждую среду, пятницу и воскресенье до конца месяца.
, используя этот запрос:
SELECT * from event_meta
outer join event on event.id = event_meta.id
where (start_date - <todays date>) % interval = 0
and start_date <= <todays date>
and end_date >= <todays date>
Я могу получить все события для этого конкретного дня.
Эта система ломается, когда мне нужно предоставить исключения для определенных событий. Например, если я хочу перепланировать один экземпляр событий в шаблоне, но оставить другие без изменений, или если я хочу обновить шаблон событий, не сдвигая события, которые должны были уже произойти.
Есть ли у кого-нибудь какие-либо предложения о том, как реализовать это в этой модели или в другой модели, которая могла бы объяснить это?