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 中的预订日期可用性范围的主要内容,如果未能解决你的问题,请参考以下文章