(如果这看起来很熟悉:我问了一个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
与我的另一个问题一样,我有点陷入困境,试图确定确切的查询以及如何以最有效的方式加入表格。谢谢你的帮助。
答案 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