2015-03-02 69 views
0

我試圖運行一個查詢來提取房間,並加入預訂表以查看給定時期(開始和結束日期)的可用房間。我在這裏畫一個空白,我認爲這是一個非常簡單的查詢,我只是想不出創建它的最佳方式。Mysql:日期比較和加入

我到目前爲止,需要加以固定

SELECT * 
    FROM room 
LEFT JOIN reservation ON room.id = reservation.room_id 
    WHERE reservation.id is null or 
      :startdate > reservation.enddate or 
      :enddate < reservation.startdate 

我上面的查詢將返回房間的多次訂票結果可滿足where子句中,即使有可能是日期範圍內保留。

回答

1

我會用not exists謂詞,我覺得直觀做到這一點:

SELECT * 
FROM room 
WHERE NOT EXISTS (
    SELECT * 
    FROM reservation 
    WHERE room.id = room_id 
    AND 
     :startdate < enddate 
    AND 
     startdate < :enddate) 

邏輯說回報,有不存在指定的日期之間的任何相關保留所有的房間。

+0

我並不認爲使用「not exists」謂詞,但此查詢仍將返回一個具有多個保留的房間,並且一個房間即使預留可能與給定的開始和結束日期衝突,也滿足where子句。 – Ralph 2015-03-02 21:49:05

+0

@Ralph哦對,好像我有邏輯錯誤......掛在 – jpw 2015-03-02 21:57:12

+0

@Ralph現在應該是正確的我想。 – jpw 2015-03-02 22:02:07