Я настраиваю поиск недвижимости на сайте аренды недвижимости для отпуска. Поиск принимает параметры для даты прибытия и даты отъезда. Свойства имеют несколько повторяющихся дат, поскольку им разрешено импортировать несколько символов для каждого свойства, чтобы интегрировать бронирования. Как я могу написать запрос, который возвращает ТОЛЬКО идентификаторы свойств, у которых нет существующих забронированных дат в отношении пользовательского ввода?
По сути, я хотел бы вернуть все свойства, которые доступны в диапазоне дат из пользовательского ввода.
Попробовал это.
SELECT p.name
FROM property AS p
INNER JOIN property_calendar AS pc
ON p.id = pc.property_id
WHERE COALESCE('2018-11-17' NOT BETWEEN pc.start AND pc.end, TRUE)
AND COALESCE('2018-11-19' NOT BETWEEN pc.start AND pc.end, TRUE)
Таблицы БД:
(показаны только соответствующие столбцы)
1010 * недвижимость *
id | name
-------------------------------------
1 | Beaches & Flows
2 | Mo Beaches Mo Problems
3 | 99 Problems and they all Beaches
property_calendar
id | property_id | start (Y-m-d) | end (Y-m-d)
----------------------------------------------
1 | 1 | 2019-3-13 | 2019-3-17
2 | 1 | 2019-4-13 | 2019-4-17
3 | 1 | 2019-3-13 | 2019-3-17
4 | 1 | 2019-3-13 | 2019-3-17
5 | 2 | 2019-3-13 | 2019-3-17
6 | 3 | 2019-5-13 | 2019-5-17
7 | 3 | 2019-6-13 | 2019-6-17
8 | 3 | 2019-7-13 | 2019-7-17
Хотя для каждого свойства в таблице календаря есть повторяющиеся даты, мне бы хотелось, чтобы он возвращал идентификатор свойства только один раз, если он доступен в этом диапазоне дат. Если есть ЛЮБЫЕ случаи, когда дата недоступна для свойства, то в запросе ничего не должно возвращаться.
Я действительно очень ценю любую помощь, которую я могу получить!