Как обрабатывать даты, которые повторяются бесконечно - PullRequest
2 голосов
/ 12 мая 2010

Я внедряю довольно простой календарь на веб-сайте, используя PHP и MySQL. Я хочу иметь возможность обрабатывать даты, которые повторяются бесконечно, и не уверен, что это лучший способ сделать это.

Для ограниченного по времени повторяющегося события, кажется, имеет смысл просто добавить каждое событие в пределах таймфрейма в мою таблицу БД и сгруппировать их с некоторой формой идентификатора рекурсии.

Но если нет предела частоте повторения события, лучше

а) помещать записи в БД для определенного периода времени (например, следующие 2 года), а затем периодически проверять и добавлять новые записи с течением времени. Проблема в том, что если кто-то смотрит на 3 года вперед, событие не будет отображаться

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

Кто-нибудь пробовал любой из этих методов? Если так, как это получилось? Или есть какой-то другой хитроумный метод, который мне не хватает?

Ответы [ 4 ]

1 голос
/ 12 мая 2010

Я бы создал одну запись для повторного события. Затем, если нужно добавить дополнительную информацию к определенной дате, я бы создал запись для вложения со ссылкой на повторяющееся событие.

1 голос
/ 12 мая 2010

Третий голос за вариант B - обоснование состоит в том, что данные должны запрашиваться только в течение ограниченного периода времени (т.е. начала и окончания). По соображениям производительности я бы предложил, помимо хранения даты / времени первого вхождения, количества и частоты, в котором вы также поддерживаете последнее вхождение в базе данных.

С

1 голос
/ 12 мая 2010

Я бы выбрал подход b, и если бы кто-нибудь добавил что-то к нему, я бы создал "настоящую" запись о событии.

Edit: Сколько периодических событий вы ожидаете и какие это будут периодические события? (например, каждый понедельник, каждые две недели и т. д.)

0 голосов
/ 12 мая 2010

Исходя из моего опыта, генерация повторяющихся дат и проверка наличия определенной даты в этом шаблоне не так уж плохи в производительности. Там только 365 дней в году. 10000 дней - это уже почти 30 лет. это означает, что размер ввода / вывода относительно мал в практическом сценарии.

Эта библиотека может помочь (но это javascript): http://github.com/mooman/recurring_dates

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...