2011-04-10 42 views
3

(如果這似乎熟悉:我問一個different question similar to this one,但我剛剛得到了一份說明,網站的設計已經改變,現在業主想辦法所以這是一個新的問題...)酒店預訂系統SQL:確定日期範圍內可用的任何房間

我正在一個酒店預訂系統,我需要找到哪些房間可用的日期範圍之間。現有的「可用性」表架構簡單,欄目有:

room_id 
date_occupied - a single day that is occupied (like '2011-01-01') 

所以,如果,例如,房間#6從1月1日佔領了1月5日,五排被添加到可用性表,一個每個房間都被佔用。

我試圖找出查詢來查找開始日期和結束日期之間可用的房間(同時還過濾了一些其他參數,例如不吸菸,牀大小等) SQL這將是有點像:

SELECT (a list of room IDs) FROM rooms, availability 
WHERE rooms.nonsmoking = 1 
    AND rooms.singlebed = 1 
    AND nothing between start_date and end_date is in availability.date_occupied 

與我的其他問題,我有點堅持努力以確定確切的查詢,以及如何連接表它最有效的方式。謝謝您的幫助。

回答

2

如果我正確理解你的數據庫結構,你需要在沒有相應行的可用空間中找到一行。

SELECT r.* 
FROM rooms r 
    LEFT JOIN availability a ON (r.id = a.room_id 
AND a.date_occupied BETWEEN :start_date AND :end_date) 
WHERE a.id IS NULL