2016-12-30 3 views
4

У меня есть две таблицы, и это название таблицы «номера» Table Rooms и другой является «заказы» Table BookingsПоиск между двумя датами в MySQL

Я присоединился две таблицы теперь, я хочу значения, когда я буду искать между book_form = "2016-12-30" и book_to = "2016-12-31" будет возвращаться true, потому что эти две даты не существуют в таблице «заказы», ​​а при поиске между book_form = "2016-12-30" и book_to = "2017-01-05" или book_form = "2017-01-03" и book_to = "2017-01-15" оно будет возвращено false, поскольку эта дата существует в таблице заказов.

Это мой запрос.

select * from rooms join room_book on rooms.room_id = room_book.room_id where status = 'available' and room_book.book_from NOT BETWEEN '2016-12-30' AND room_book.book_to NOT BETWEEN '2016-12-31' 

Примечание:К сожалению на самом деле столбец book_from дата в таблице заказы 2017-01-01.

+0

Что означает 'NULL' в' book_from'/'book_to'? Разве номер 1/A2 забронирован с начала времени до конца или наоборот? –

+0

забыть о втором ряду. – shalder

+0

Да, это было забронировано. – shalder

ответ

1

Простой SQL-запрос должен возвращать только те номера без бронирования, которая включает в комплект поставки дата:

SELECT * 
FROM rooms 
LEFT JOIN room_book 
    ON room_book.room_id = rooms.room_id 
    AND 'search_date' BETWEEN room_book.book_from AND room_book.book_to 
WHERE rooms.room_id IS NULL 
AND rooms.status = 'available' 

Заменитель дата вы ищете search_date выше.

Используя LEFT JOIN, вы получите все записи в комнатах. Тест IS NULL в предложении where исключает те строки, которые не имеют соответствующей строки в room_book.

1
select * 
from rooms 
join room_book on rooms.room_id = room_book.room_id 
where status = 'available' 
and room_book.book_from >= '2016-12-30' 
AND room_book.book_to <= '2016-12-31' 

Попробуйте, как это.

+0

Это приведет к неправильному выполнению алфавитных сопоставлений строк, а не к дате. –

+0

@ LukeBriggs Есть ли способ заставить MySQL выполнить другую форму сравнения в полях DATE или DATETIME? – parrker9

+0

@ parrker9 Да, см. Комментарии Троеера выше о функции CONVERT() :) –

Смежные вопросы