如何在入住和退房之间检查可用性房间预订?

时间:2014-04-12 09:15:18

标签: php mysql sql

需要您的帮助来检查房间预订的可用性。为了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应用程序仍然显示该房间仍然可用于保留的消息。什么是正确的查询?需要你的帮助。

3 个答案:

答案 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”使事情复杂化。因此,如果您真的考虑以实际方式检查房间可用性,这应该是正确的答案。如果要将此查询分配给变量,请使用双引号将查询括起来。