2017-03-16 107 views
-2

我正在为酒店预订系统制作网站。我需要关于查询的帮助,我正在通过后期搜索,但我没有找到解决方案,将为我工作。 在我的数据库我有表预订,与登记入住和退房日期,需要检查时,用户输入登记入住和退房指定的房间查询。这里是我的查询:查询酒店预订系统php

SELECT * FROM booking WHERE room='$room' and ((checkin>='$cIN' and checkout<='$cOUT')or(checkin<='$cIN' and checkout>='$cOUT'))

“$ CIN”和“$ COUT”从用户在检查输入,并检查了。 我的查询在某些情况下工作,可以说例如房间预订时间为15/03/2017至20/03/2017,当新用户输入13/03/2017至17/03/2017时,则查询不返回任何结果,并且用户可以预订同一个房间。因此,在这种情况下,我们在同一时间间隔内的一个房间中有2个用户。我需要限制这种保留。提前致谢。

+1

你正在检查一个周期是否完全盖过其他反之亦然 - 但当然你也需要考虑到用户输入的日期只有一个落入已经预订的时间段的情况。如果您在确定正确的逻辑时遇到问题,那么我建议您在一张纸上涂写可能的案例 - 这应该有助于弄清楚。 – CBroe

+0

如果在同一天不能有两次预订(第一位客人已预订到今天,所以下一位客人只能从明天开始预订),那么您只需检查开始日期或结束日期是否落入现有时间段(包括第一天/最后一天的平等) – CBroe

+0

谢谢你的回答,我想我找到了解决方案,你的评论帮助我:) – marjov

回答

0

要找到重叠部分,我们需要在现有结帐之前搜索请求签入的项目,并且请求的结帐在现有签入之后进行。

-- Return existing bookings that overlap the requested date range 
SELECT * 
FROM booking 
WHERE room = '$room' 
and checkin <= '$cOUT' and checkout >= '$cIN' 

比你想象:)

注意,该查询将不会允许新的预订在那之前的预订签出同一时间签简单。如果您签入/出字段做没有店面的时间,那么你就需要改变这个逻辑用<,>而不是< =,> =