3

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

ID | ROOM_ID | CHECK_IN_DATE | CHECK_OUT_DATE | USER_ID

我需要对一组日期范围内可用/不可用的房间运行搜索查询。

另请记住,还有另一个表格,其中包含预订房间的日期及其格式:

ROOM_ID | DATE

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

- -编辑 - -

还有一个模式的房间表:

ID | ROOM DETAILS etc

unavailability/prebooked dates表基本上是零星的单个日期,unavailability表中的每个日期都是指由于某种原因无法预订房间的日期,例如:维护等

4

3 回答 3

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'
   )

由于没有日期范围,我不确定预订房间的因素。预订的房间是否也可以在预订时获得条目?

于 2011-02-23T14:22:43.063 回答
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'
);
于 2011-02-23T14:22:05.407 回答
0

有5种可能的方法:

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

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

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

只有第一个和最后一个是您想要的,所以您要查找的是:search.end < entry.start OR search.start > entry.end

于 2011-02-23T14:22:52.667 回答