酒店预订系统SQL:识别日期范围内的任何可用房间

时间:2011-04-10 22:46:44

标签: mysql sql join

(如果这看起来很熟悉:我问了一个different question similar to this one,但我刚收到一条说明网站设计已经改变,现在所有者想要一种搜索​​方式在一系列日期之间提供的房间。所以这是一个新问题......)

我正在建立一个酒店预订系统,我需要找到一系列日期之间的房间。现有的“可用性”表模式很简单,列是:

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

因此,例如,如果#1房间从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

与我的另一个问题一样,我有点陷入困境,试图确定确切的查询以及如何以最有效的方式加入表格。谢谢你的帮助。

1 个答案:

答案 0 :(得分: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