2016-12-30 22 views
1

我有兩個表兩個日期之間的搜索和這個表的名稱是「房間」 Table Rooms和另一種是「預訂」 !Table Bookings我想在SQL

我加入了兩個表,現在,我希望值時,我會搜索

book_form = "2016-12-30"book_to = "2016-12-31"

之間會因爲這兩個日期不存在於「訂單」表中返回true,當搜索

之間和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' 
+0

您一直提到名爲book_fORm的列。你的意思是book_fROm? – Strawberry

+0

並參閱http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql - 查詢 – Strawberry

回答

0

試試這個返回兩個日期

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

返回空結果。 –

+0

這是回到前面。 – Strawberry

1

從基尚特爾的答案返回兩個日期之間的所有記錄。因此,如果您希望在兩個日期之間有房間,請輸入真或假,則可以這樣做:

SELECT IF(COUNT(*) > 0, TRUE, FALSE) AS NewResult 
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' 
+1

對我的查詢返回記錄,如果在日期之間預訂房間,所以返回空的結果意味着兩個日期之間沒有可用的預訂。 –

+0

是的,你可以簡單地拋出自定義錯誤,否則使用計數功能 –