Подобные вещи выходят далеко за рамки возможностей любой основной системы баз данных.Это также создает кучу проблем, с которыми вы, вероятно, не хотите иметь дело.Решить эти проблемы было бы гораздо сложнее, чем просто добавить событие в базу данных на каждую неделю.
Например, если у вас было событие, которое начинается 2011/01/01 и повторяется каждую неделю, тогда ваш запрос, select * from [tbl_events] order by [date]
будет производить бесконечный набор результатов, начиная с 2011/01/01.Я полагаю, что вы можете ограничить его, указав диапазон дат, но если вы когда-нибудь забудете конечное значение, запрос будет стирать результаты до тех пор, пока вы не превысите некоторый лимит.
То же самое произойдет, если вынаписать код, чтобы сделать это.Ваш код должен был бы установить некоторый верхний предел количества недель, для которых вы показываете события.
Вы можете выбрать один из двух вариантов:
1) Вводить одну запись события в базе данных на каждую неделю,с каким-то верхним пределом количества недель вперед вы добавляете записи.Вам также понадобится способ добавить больше записей для повторяющегося события.Например, возможно, вы изначально добавляете 26 событий (на 6 месяцев), а затем после того, как событие происходит каждую неделю, программа автоматически добавляет одно на 6 месяцев в будущем.
2) Введите одну запись о событии, которая получаетобновляется с новой датой запуска каждую неделю.Теперь ваша проблема в отчетности.После запроса вы должны определить, что запись является повторяющимся событием, а затем решить, сколько событий вы хотите показать.
Второй вариант становится проблемой, если вы хотите выполнить запрос диапазона, потому что вы можетепросто проверьте поле [date]
на события в будущем.Вы можете сохранить поля begin_date
и end_date
и выполнить запрос диапазона к ним.
Какой метод вы выберете, во многом зависит от того, как вы собираетесь использовать систему.Если это в первую очередь для событий, которые происходят один раз, то вам, вероятно, лучше использовать первый вариант.Если система предназначена главным образом для событий, которые повторяются по расписанию, то вы, вероятно, захотите использовать второй вариант и формализовать концепцию дат начала и окончания, а также повторять частоты.