需要您的帮助来检查房间预订的可用性。为了ilustration我有一个tabel,有3个coloumns,如room_number(varchar),check_in(日期),check_out(日期)。
然后该表有一个记录数据:1212,2014-04-19,2014-04-22。然后在我的PHP程序中,我想检查相同房间号的可用性,签入日期= 2014-04-20和签出日期= 2014-04-23。
要检查房间的可用性,我使用此查询:
select * from apartment where room_number = '$room_number' and ((date_in >= '2014-04-20' and date_out <= '2014-04-23') or (date_in <= '2014-04-20' and date_out >= '2014-04-23'));
根据该日期,应该在该表中显示之前记录的数据,但该查询未显示它,我的PHP应用程序仍然显示该房间仍然可用于保留的消息。什么是正确的查询?需要你的帮助。
答案 0 :(得分:0)
select * from apartment a
where
a.room_number = '$room_number'
and not exists (select * from apartment a2
where a2.room_number = a1.room_number
and ( (date_in >= '2014-04-20' and date_out < '2014-04-23')
or (date_in <= '2014-04-20' and date_out > '2014-04-23')
)
)
;
答案 1 :(得分:0)
您可以在办理入住和退房时使用日期类型。但考虑一个案例
您的房间于2014年4月20日早上腾空。当您考虑约会时,该房间无法给任何其他客人。因此,在我的意见中,更好地考虑使用时间戳而不是日期
提出疑问你可以实现类似这样的查询
select room_number from apartment as ap
where room_number not in
(
select room_number
from apartment as ap1
where (DATE_BEGIN >= @start and DATE_BEGIN < @end)
or (DATE_END >= @start and DATE_END < @end)
)
答案 2 :(得分:-1)
我认为这应该是您需要的查询
SELECT * FROM apartment WHERE room_number = '$room_number' AND date_in <= '$date_out' AND date_out >= '$date_in';
此外,我认为我们不应该使用“BETWEEN”使事情复杂化。因此,如果您真的考虑以实际方式检查房间可用性,这应该是正确的答案。如果要将此查询分配给变量,请使用双引号将查询括起来。