PHP/MySQL 中的预订日期可用性范围

Posted

技术标签:

【中文标题】PHP/MySQL 中的预订日期可用性范围【英文标题】:Booking Dates Availability Ranges in PHP/MySQL 【发布时间】:2013-01-10 14:26:36 【问题描述】:

我有两个字段,check_in 和 nights。

晚数包括入住日期。因此,如果客户预订了 1 晚,他将在第二天结帐,然后房间就可以预订了(除非已经被其他人预订了)。

这是我的表中的几个记录的示例,

customer          room            check_in            nights
cus1              test room       2013-01-23          2
cus2              test room       2013-01-25          1
cus3              test room       2013-01-26          4

cus3 已经预订了房间,他们将于 2013 年 1 月 26 日入住,入住 4 晚。这意味着该房间在此期间将无法预订。

那么我如何检查房间是否可用?

该房间应仅可在 2013-01-30 入住。

感谢所有帮助:)

【问题讨论】:

您想查看下一个房间何时可用(例如,从当前日期开始)?或者您想检查房间在给定日期是否可用? @StephenBooher 我想传递一个给定的日期,如果可能,如果房间可用,则返回 true,如果房间不可用,则返回 false。 【参考方案1】:

当您获取客户行的数据时,使用它来获取结帐日期:

$check_out = date('Y-m-d', strtotime($row['check_in'].' + '.$row['nights'].' days'));

【讨论】:

【参考方案2】:

类似的,

SELECT room, 
       CASE WHEN 'dateHere' BETWEEN check_in AND check_out
           THEN 'UNAVAILABLE'
           ELSE 'AVAILABLE'
       END Status
FROM
  (
      SELECT  room, 
              check_in, 
              DATE_ADD(check_in, INTERVAL nights day) check_out
      FROM    booking
  ) s
SQLFiddle Demo (showing unavailable) SQLFiddle Demo (all are available)

【讨论】:

这几乎是完美的,我忘了补充说我将发送一个日期和请求的夜数。因此,如果 x 日期可用于 x 夜数 你能举个例子吗? (以我提供的现有数据为例)。客户想在2013-01-21预订房间并入住,他们想住4天。他们应该无法预订房间,因为该范围内已有预订。 用这个查询创建一个存储过程怎么样,<< CLICK HERE >> 我没有创建存储过程的权限我不认为:(。另外看看你的例子,如果有成千上万的预订,看起来它会返回每一行,我会只喜欢返回“测试房间”是否可用。我有一个房间列表,比如房间 1、房间 2、房间 3、房间 4。我需要返回该列表中在给定日期和夜晚可用的房间。跨度> 【参考方案3】:

有一个很棒的网站,其中包含用于常见场景的 mysql 语句列表。检查给定时间段内是否有房间是其中之一:http://www.artfulsoftware.com/infotree/queries.php#576

【讨论】:

【参考方案4】:

当您选择入住日期和入住的夜晚时,您可以执行以下操作(虚拟代码):

    $startDate='2013-01-26';//for example
    $to_time=date("Y-m-d", strtotime("$startDate + 4 day"));
    echo $to_time;//prints 2013-01-30

【讨论】:

以上是关于PHP/MySQL 中的预订日期可用性范围的主要内容,如果未能解决你的问题,请参考以下文章

预订数据库中的可用性

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

我想通过检查预订日期或即将到来的日期的时间段可用性来更新我的会议室预订表

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

如何分组,计算和映射日期范围? [关闭]

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