【问题标题】:hotel reservation system SQL: identify any room available in date range酒店预订系统 SQL:识别日期范围内的任何可用房间
【发布时间】:2011-04-10 22:46:43
【问题描述】:

(如果这看起来很熟悉:我问了一个different question similar to this one,但我刚刚收到一个说明,网站设计已经改变,现在业主确实想要一种方法来搜索任何房间在一系列日期之间可用。所以这是一个新问题...)

我正在开发一个酒店预订系统,我需要找出在一系列日期之间有哪些客房可供预订。现有的“可用性”表架构很简单,列是:

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

因此,例如,如果 6 号房间在 1 月 1 日至 1 月 5 日期间被占用,则可用性表中会添加 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

与我的其他问题一样,我在尝试确定确切的查询以及如何以最有效的方式加入表时有点卡住了。感谢您的帮助。

【问题讨论】:

    标签: mysql sql join


    【解决方案1】:

    如果我正确理解了您的数据库结构,您需要在没有相应行的房间中找到一行。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      相关资源
      最近更新 更多