用于预订的 MySQL 查询。如何允许在同一日期进行两次预订(入住/退房)

Posted

技术标签:

【中文标题】用于预订的 MySQL 查询。如何允许在同一日期进行两次预订(入住/退房)【英文标题】:MySQL query for booking. How to allow two reservations on the same date (check-in/check-out) 【发布时间】:2014-05-30 13:10:37 【问题描述】:

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

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

假设有人在 21 日到 22 日预订。 他于 21 日下午 4:00 入住,并于 22 日下午 12:00 退房 房间在 21 日下午 4:00 之前仍然是免费的 22日中午12:00以后房间还有空

通过此查询,我无法预订 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

非常感谢!

【问题讨论】:

看看this有没有帮助 ...或者这个artfulsoftware.com/infotree/qrytip.php?id=577 它有效。有用!!!我在使用日期逻辑时遇到问题。非常感谢@georstef。 【参考方案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')

谢谢!

【讨论】:

【参考方案2】:
 $AvailableWhere = array ('checkin <=' => $start, 'checkin <=' => $end, 'checkout >=' => $end, 'checkout >=' => $start, 'checkin >=' => $start AND 'checkout' <= $end);

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

【讨论】:

以上是关于用于预订的 MySQL 查询。如何允许在同一日期进行两次预订(入住/退房)的主要内容,如果未能解决你的问题,请参考以下文章

我如何查询给定日期范围的mysql并加入两个表?

没有重复数据的 MySQL 最近日期

需要一个 MySQL 查询来获取未在表中注册的日期

用于检查房间可用性的 SQL 查询

查找预订重叠以检查日期可用性

帮助编写大厅预订日期可用性搜索查询