Pavel6
Новичок
Помогите составить SQL запрос выборки диапазона между датами
Помогите составить SQL запрос.
Есть таблица Orders которая хранит дату начала и дату конца бронировки квартиры.
arrival_date departure_date
2008-01-26 2008-01-28
2008-02-18 2008-02-21
2008-01-24 2008-01-25
arrival_date- дата начало бронировки
departure_date – дата конца бронировки
Если взять первое поле, то мы видим что стоит бронь с 2008-01-26 по 2008-01-28
Запрос должен отобрать квартиры которые свободны с одной даты по другую.
Но тут есть проблема если дата 2008-01-27 для поиска попадает в диапазон между 2008-01-26 по 2008-01-28, тогда это так же бронь.
Я делал вот так, но выходит фигня.
Это запрос должен получить занятые квартиры, т.к. свободные не выходит одним запросом получить.
SELECT rooms.id
FROM orders_rooms
RIGHT JOIN rooms ON rooms.apartment_id = orders_rooms.apartment_id
WHERE orders_rooms.arrival_date <= ‘2008-01-27’
AND orders_rooms.departure_date >= ‘2008-01-27’
GROUP BY rooms.id
Получаю из него ID занятых квартир
И теперь вывожу свободные квартиры.
$sql = "select * from rooms where id NOT IN (".implode(",",$n_id).") limit 3";
Но это все применимо к одной дате, а мне нужно выбрать по двум датам, т.е. с 2008-01-27 по 2008-01-30 найти свободные квартиры, которые не попадают в диапазон между этими датами
Помогите составить SQL запрос.
Есть таблица Orders которая хранит дату начала и дату конца бронировки квартиры.
arrival_date departure_date
2008-01-26 2008-01-28
2008-02-18 2008-02-21
2008-01-24 2008-01-25
arrival_date- дата начало бронировки
departure_date – дата конца бронировки
Если взять первое поле, то мы видим что стоит бронь с 2008-01-26 по 2008-01-28
Запрос должен отобрать квартиры которые свободны с одной даты по другую.
Но тут есть проблема если дата 2008-01-27 для поиска попадает в диапазон между 2008-01-26 по 2008-01-28, тогда это так же бронь.
Я делал вот так, но выходит фигня.
Это запрос должен получить занятые квартиры, т.к. свободные не выходит одним запросом получить.
SELECT rooms.id
FROM orders_rooms
RIGHT JOIN rooms ON rooms.apartment_id = orders_rooms.apartment_id
WHERE orders_rooms.arrival_date <= ‘2008-01-27’
AND orders_rooms.departure_date >= ‘2008-01-27’
GROUP BY rooms.id
Получаю из него ID занятых квартир
И теперь вывожу свободные квартиры.
$sql = "select * from rooms where id NOT IN (".implode(",",$n_id).") limit 3";
Но это все применимо к одной дате, а мне нужно выбрать по двум датам, т.е. с 2008-01-27 по 2008-01-30 найти свободные квартиры, которые не попадают в диапазон между этими датами