我有一张存储房间预订的表,架构是:
ID | ROOM_ID | CHECK_IN_DATE | CHECK_OUT_DATE | USER_ID
我需要为在一系列日期之间可用/不可用的房间运行搜索查询。
另请注意,还有另一张表格,其中包含预订房间时的日期及其格式:
ROOM_ID | DATE
所以我需要运行一个查询,查找设定范围内的可用房间,我将如何制定查询? 我在这里使用MySQL。
--- ---编辑
还有一个架构的房间表:
ID | ROOM DETAILS etc
不可用性/预订日期表基本上包含零星的单日期,不可用表中的每个日期是指由于某种原因无法预订房间的日期,例如:维护等
答案 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