[英]MySQL query booking system - remove entry if room is already booked
我已经为此花了两天时间(我是MySQL的新手,请耐心等待),我无法绕开我要查询的查询...首先是数据:
我有两张桌子,一张用于这样的房间:
1.5 | 单身| 海
表预订
如果某人要预订一个带有tipe_room = Single和view_room = Sea且check_in date = 2012-02-15和check_out date = 2012-02-20的房间,我希望它返回可用的id_room(1.1和1.5)。
现在,如果某人要预订一个带有tipe_room = Single和view_room = Sea且check_in date = 2012-02-19和check_out date = 2012-02-23的房间,我希望它返回可用的id_room(仅1.5)。
我一直在尝试JOIN条件,但是当条件满足时,它将排除所有房间...
请问我该怎么做?
最好的问候,亚历克斯
此查询应检查所有四种情况(A,B,C和D)的占用情况:
check_in check_out
|=TEST=PERIOD=|
|--A--| |--B--| |--C--| <- check_in<period_end AND check_out>period_start
|--------D--------| <- check_in<period_start AND check_out>period_end
这是完整的查询:
SELECT `id_room` FROM `rooms`
WHERE `tipe_room`='Single' AND `view_room`='Sea'
AND NOT EXISTS
(
SELECT * FROM `reservations` WHERE `n_room`=`rooms`.`id_room`
AND ((`check_in`<'2012-02-20' AND `check_out`>'2012-02-15')
OR (`check_in`<'2012-02-15' AND `check_out`>'2012-02-20'))
)
试试这个查询
select * from room where room.view = :view and room.type = :type
and (select count(*) from reservation r where r.room_id = room.id and
(r.checkout > :checkin and r.checkin < :checkout) or
(r.checkin < :checkin and r.checkout > :checkin)) = 0
这里的主要思想是选择房间,然后检查子选择中是否尚未预订。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.