2011-02-17 67 views
3

嗨,大家好我已持有的日期時,一個房間是在模式不可用的表:SQL要檢查的日期集落日期的指定範圍內

ROOM_ID | DATE_UNAVAILABLE 

我需要一個SQL查詢檢查如果房間在一個範圍內的兩個日期之間是可用 - 沿

Select All rooms that are constantly available between date 1 and date 2 

或者說

行的一些事情選擇所有的房間,唐沒有在日期不可用表中輸入的日期其中1日和日期介於2

我使用PHP的MySQL這裏

感謝

回答

2

內部查詢發現不可用的房間,然後我們用一個不存在左連接刪除那些來自我們的結果的日期,只留給我們可用的房間。

SELECT r.ROOM_ID 
FROM rooms r LEFT JOIN (
    SELECT ROOM_ID 
    FROM tableName 
    WHERE DATE_UNAVAILABLE BETWEEN 'Date1' AND 'Date2' 
    GROUP BY ROOM_ID 
) g ON r.ROOM_ID = g.ROOM_ID 
WHERE g.ROOM_ID IS NULL 

Alternativly,如果您已經準備好正確的索引,跳過組可能會更快:

SELECT r.ROOM_ID 
FROM rooms r LEFT JOIN tableName g ON r.ROOM_ID = g.ROOM_ID 
    AND g.DATE_UNAVAILABLE BETWEEN 'Date1' AND 'Date2' 
WHERE g.ROOM_ID IS NULL 
1

只要你有另一張表,說rooms也可以是這樣的:

select * from rooms r where not exists 
(select * from room_unavail u 
    where r.id = u.id and u.date_unavailable between date1 and date2) 

您不能僅僅使用您指定的一張表執行此操作,因爲當表格爲空時 - 所有房間都可用,但不會得到任何結果。

0

讓myRoomId爲給定房間的ID,dateStart和dateEnd爲時間間隔的開始和結束日期。比:

select count(*) from tblRooms 
where date_unavailable>=dateStart and date_unavailable<=dateEnd 
and room_id = myRoomId 

給定選擇返回0如果房間可用。