MySQL查询预订。如何在同一天允许两次预订(登记入住/退房)

时间:2014-05-30 13:10:37

标签: mysql sql date datetime

我试图在两个日期之间预订所有房间 我现在正在使用此查询,但我遇到了问题。我做了很多尝试,做了很多搜索,但几个小时后我决定尝试在这里寻求帮助。

SELECT 1 FROM reservations WHERE
checkin <= '$check_out' AND checkout >= '$check_in'

让我们说有人在21日到22日预订 他于21日下午4:00办理登机手续,22日退房,中午12:00 这个房间在下午4点之前仍然是免费的 这个房间在中午12点之后仍然是免费的

通过此查询,我无法预订20至21日 入住时间为20日下午4:00,退房时间为21日中午12:00

我也无法预订22日至23日。

知道如何调整查询以反映这一现实吗?

还有查询:

(checkin <= '$check_in' AND checkout >= '$check_in') OR
(checkin <= '$check_out' AND checkout >= '$check_out') OR
(checkin >= '$check_in' AND checkout <= '$check_out')

你可以参考这个问题,这是我接受查询的地方: Checking for date range conflicts in MySQL

非常感谢!

2 个答案:

答案 0 :(得分:1)

@georstef将此链接发布给我,看看它是否有助于我的问题下面的评论:Using MySQL query in selecting room availability

它确实了!

现在正确的WHERE子句如下:

(checkin <= '$check_in' AND checkout >= '$check_in') OR
(checkin < '$check_out' AND checkout >= '$check_out') OR
(checkin >= '$check_in' AND checkout < '$check_out')

谢谢!

答案 1 :(得分:0)

 $AvailableWhere = array ('checkin <=' => $start, 'checkin <=' => $end, 'checkout >=' => $end, 'checkout >=' => $start, 'checkin >=' => $start AND 'checkout' <= $end);

$this->db->where($AvailableWhere);