Поэтому я делаю простую систему бронирования, С# и sql. У меня есть datetimepicker 1 и datetimepicker 2. Напр. datetimepicker = aug 1 2009 и datetimepicker2 = aug 3 2009 сохранено в sql пользователем.
Что делать с тем, чтобы следующий клиент, который попытался получить дату 1-3, был вынужден выбрать другую дату?
Вы можете запустить такой запрос, как этот:
select count(*) as cnt
from reservations t
where
not
(
(@dtTo <= t.DateFrom)
or
(@dtFrom >= t.DateTo)
)
предполагая, что @dtFrom, @dtTo - это даты, выбранные вторым пользователем, и предполагающие
у вас есть таблица reservations
с DateFrom
и DateTo
.
Какова идея этого:
два сегмента времени [dateFrom1, dateTo1]
и [dateFrom2, dateTo2]
не являются
(т.е. не перекрываются) для этого сценария, основанного на резервировании, тогда и только тогда, когда: dateTo1 <= dateFrom2 or dateFrom1 >= dateTo2
(нарисуйте его на листе бумаги, и вы поймете, почему).
Итак, если отрицание not ( dateTo1 <= dateFrom2 or dateFrom1 >= dateTo2 )
верно, два сегмента перекрываются/конфликтуют.
NOT (range_start < @check_period_end ...