【发布时间】:2011-04-09 18:03:20
【问题描述】:
我有一个关于酒店预订系统的查询,我需要查找特定房间可用的日期。 (这是一家精品酒店,人们预订特定房间,所以他们在获得此代码之前就知道他们想要的确切房间。我想要的结果是一个房间的详细信息,我在查询中指定的那个 - - 我不是在寻找多个房间的信息。)
“可用性”表架构很简单,每一行是:
room_id
date_occupied - a single day that is occupied (like '2011-01-01')
因此,例如,如果房间在 1 月 1 日至 1 月 5 日期间被占用,则可用性表中会添加五行,该房间每天占用一行。
这是我想要解决的问题:
- 用于查找特定房间在开始日期和结束日期之间何时可用的查询,类似于:
SELECT rooms.* FROM rooms, availability WHERE rooms.id = 123 AND availability.room_id = rooms.id AND nothing between start_date and end_date is in availability.date_occupied
- 我也在寻找类似的查询,我只想查看在开始日期和接下来的两天内是否有可用的特定房间,例如:
SELECT rooms.* FROM rooms, availability WHERE rooms.id = 123 AND availability.room_id = rooms.id AND start_date, start_date+1day and start_date+2days is not in availability.date_occupied
我在试图找出确切的连接时有点卡住了。有什么建议么?请注意,如果它有帮助,我对可用性表的不同模式完全开放。使查询工作最有效的因素。
【问题讨论】: