Последнее замечание / предупреждение: приведенные выше запросы не будут работать, если вы указали несуществующий номер room_id. Это не проблема, если ваше приложение создает SQL.

я есть запрос к системе бронирования отелей, и мне нужно найти даты, когда будет доступен конкретный номер. (Это бутик-отель, где люди бронируют определенные номера, поэтому они знают, какую именно комнату они хотят получить, прежде чем перейти к этому коду.В результате я получаю данные об ОДНОЙ комнате, которую я указал в запросе - я не ищу информацию о нескольких комнатах.)

Схема таблицы «доступность» проста, каждая строка:

room_id
date_occupied - a single day that is occupied (like '2011-01-01')

Так, если, например, комната занята с 1 по 5 января, в таблицу доступности добавляются пять строк, по одной на каждый день, когда комната занята.

Вот что я пытаюсь решить:

запрос, чтобы найти, когда определенная комната доступна между начальной и конечной датой, вроде как:
SELECT rooms.* FROM rooms, availability
 WHERE rooms.id = 123
   AND availability.room_id = rooms.id
   AND nothing between start_date and end_date is in availability.date_occupied
Я также ищу похожий запрос, в котором я просто хочу узнать, доступна ли определенная комната для даты начала и следующих двух дней, например:
SELECT rooms.* FROM rooms, availability
 WHERE rooms.id = 123
   AND availability.room_id = rooms.id
   AND start_date, start_date+1day and start_date+2days is not in availability.date_occupied

Я немного застрял, пытаясь выяснить точные соединения. Какие-либо предложения? Обратите внимание, что, если это поможет, я полностью открыт для другой таблицы доступности. Что бы ни заставляло запросы работать наиболее эффективно.

Ответы на вопрос(7)

Ваш ответ на вопрос