需要查看一系列日期是否与sql中的另一个日期范围重叠

时间:2011-02-23 14:12:56

标签: php mysql sql-optimization

我有一张存储房间预订的表,架构是:

ID | ROOM_ID | CHECK_IN_DATE | CHECK_OUT_DATE | USER_ID

我需要为在一系列日期之间可用/不可用的房间运行搜索查询。

另请注意,还有另一张表格,其中包含预订房间时的日期及其格式:

ROOM_ID | DATE

所以我需要运行一个查询,查找设定范围内的可用房间,我将如何制定查询? 我在这里使用MySQL。

--- ---编辑

还有一个架构的房间表:

ID | ROOM DETAILS etc

不可用性/预订日期表基本上包含零星的单日期,不可用表中的每个日期是指由于某种原因无法预订房间的日期,例如:维护等

3 个答案:

答案 0 :(得分:2)

SELECT
   ROOM_ID
FROM
   Rooms r
   LEFT JOIN Bookings b ON (
      r.ROOM_ID = b.ROOM_ID
      AND b.CHECK_IN_DATE > '$MAX_DATE'
      AND b.CHECK_OUT_DATE < '$MIN_DATE'
   )

由于没有日期范围,我不确定预订房间的因素。预订的房间是否也可以预订入场?

答案 1 :(得分:1)

SELECT id FROM rooms WHERE id NOT IN (
   SELECT room_id FROM bookings 
   WHERE check_in_date < 'end date' AND check_out_date > 'start date'
);

答案 2 :(得分:0)

有5种可能的方式:

---s-----e---

s-e----------
--s-e--------
-----s-e-e---
--------s-e--
----------s-e

s = start / e = end firste line是您的数据库集,另一个是可能的搜索

只有第一个和最后一个是您想要的,所以您寻找的是: search.end&lt; entry.start OR search.start&gt; entry.end