Хранение и выборка повторяющихся событий

Silex

unitecsys
Хранение и выборка повторяющихся событий

Требуется хранить информацию о событиях, которым можно назначать повтор (скажем, планерка такого-то числа + повторяется каждую неделю в течение неограниченного количества времени или, например, 10 раз). Возникла проблема с организацией хранения интервалов и кол-ва повторов, чтобы потом безболезненно делать выборки событий на текущий интервал.

Не могу сообразить, как делать выборку, если данные хранятся "в лоб" - поля event_date (date), interval_days, repeat_count. Была идея ввести поле с ближайшей датой повторяющегося события и по крону его обновлять, но эту дату тоже как-то нужно получить, да и ограничения здесь вылазят сразу же, причем нехилые...

Есть соображения, как лучше организовать?
 

Wicked

Новичок
Один из вариантов: сделать таблицу итератора. Подойдет таблица типа heap с одним полем `iterator` int not null.
В этой таблице храним номера 0..max(repeat_count).
Далее делаем:
[sql]select
*
from
`events`
inner join `iterator`
where (`iterator`.`iterator` <= `repeat_count`)
and (`event_date` + interval `interval_days`*`iterator` day = cast(now() as date))[/sql]и получаем все события, которые присходят сегодня

-~{}~ 09.03.05 14:11:

PS: такая фигня используется в моем поисковике и имхо показала себя с наилучшей стороны.
 
Сверху