Задать вопрос
@Zohei

Электронная очередь (расписание) на сайте. Как сделать периодичность?

Приветствую!
Задача в общих чертах:
Календарь с возможностью бронирования услуг на определенные часы.
Сложность вызвала опция Периодичность; клиент может забронировать не разовое оказание услуг, а бронирование их на выполнение один, два, три или четыре раза в месяц. Соответственно, все эти дни (часы) не должны быть доступны для выбора другим клиентам.

Скажем так, если бронь на выполнение один раз в неделю, то проверить занятость дня в календаре можно практически одним запросом
SELECT * FROM ORDERS WHERE REPEAT LIKE '1 week' AND WEEKDAY(`date`)+1 = '{$weekday}'

А что делать с бронью на "каждые три недели" , я впал в ступор.
  • Вопрос задан
  • 1345 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Duha666
@Duha666
На один час не может быть больше одной брони, иначе они пересекутся, с какой бы периодичностью бронь не была. Поэтому можно хранить какая бронь есть на каждый час, и проверять, что она не пересекается с запросом. Чтобы хранить бронь достаточно знать день начала и периодичность. Она занимает день, если разность между запросом и началом брони делится на периодичность
Ответ написан
Комментировать
MetaAbstract
@MetaAbstract
Архитектор информационных систем и баз данных. Ful
Так же как и для любого ограниченного по времени ресурса. Данные с периодическим бронированием блокируют ресурс на период на который выставлена бронь на каждый таймслот в периоде. Посмотрите как в календаре в смартфоне реализовано.
Ответ написан
maximw
@maximw
Должно быть две сущности - бронирование и тайм-слот.
У бронирования должен быть признак периодичности и ее настройки.
У тайм-слота должна быть ссылка на бронирование, пустая или занятая.
Тайм-слоты должны быть заранее созданы на будущее, в пределах которого может осуществляться бронирование.

При создании бронирования, всем подходящим по расписанию тайм-слотам ставится ссылка на бронирование.
При удалении бронирования. соотв. ссылки удаляются.
Важно при создании бронирования просмотреть возможность занять нужные тайм-слоты и как-то обработать ситуацию когда хотя бы один тайм-слот не может быть занят в соответствии с расписанием.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы