给出MySQL表:
occupied_room_dates
id (int) date_a (DATE) date_b (DATE)
1 2018-12-20 2018-12-25
5 2019-01-05 2019-02-15
36 2019-01-02 2019-03-21
并给出两个变量,它们包含格式为yyyy / mm / dd的日期字符串:
DT_A = yyyy/mm/dd (Example: 2019-02-03)
DT_B = yyyy/mm/dd (Example: 2019-05-03)
我要执行查询以检查给定的DT_A和DT_B(即DT_A
a) [date_a-date_b]
b) [DT_A-DT_B]
彼此重叠。
示例/期望:
在示例中,对于ROOM_ID = 36,它应该返回示例表中的第三行,因为日期间隔重叠。
对于另一个示例(ROOM_ID = 36,DT_A = 2019-06-15,DT_B = 2019-07-15),应该没有匹配项,因为没有日期间隔重叠。
到目前为止,我尝试过的是:
由于发生重叠的一般方式有四种,因此我创建了四个条件来触发警报:
"SELECT `date_a`,`date_b` FROM `occupied_room_dates`
WHERE `id`='".ROOM_ID."' AND
(
(`date_a`<='".DT_A."' AND `date_b`>='".DT_A."')
OR (`date_a`<='".DT_B."' AND `date_b`>='".DT_B."')
OR (`date_a`>='".DT_A."' AND `date_b`<='".DT_B."')
OR (`date_a`<='".DT_A."' AND `date_b`>='".DT_B."')
) LIMIT 1"
但是在包含相当数量的行的真实表上尝试此操作,它无法按预期工作。而且我在可视化所有必须满足的条件以及在单个MySQL查询中表示这些条件时遇到了麻烦。
此操作的目的是检查房间是否在日期间隔内被占用。您能帮我查询一下吗?
答案 0 :(得分:0)
说明:
您的代码似乎很正确。但是,由于您仅从一个表中获取数据,因此就不需要recieves()
。我不明白从3列中到底要输出什么,所以我选择了*,如果只需要RoomID,请改用Where ID = "Room_ID"
。
代码:
SELECT id FROM occupied_room_dates