【问题标题】:Hotel room booking/reservation酒店房间预订/预订
【发布时间】:2015-10-10 14:49:41
【问题描述】:

我正在为一家小型酒店开发预订/预订系统。我很擅长 PHP,但不太擅长 SQL...我制作了一个表格,您可以在其中输入您的信息、房间数量并使用日历选择抵达日期和退房日期。

现在一切都很顺利,直到你必须检查哪些房间可用,这让我很头疼。您可以预订 10 间客房。

我目前在 MySQL 中有一个表来存储信息、日期、预订 ID 和房间 ID/号码。

您将如何编写用于检查哪些房间可用和不可用的 SQL?

它应该看起来像

"SELECT * FROM bookings WHERE checkinDate >= '$formCheckin' 
 AND checkoutDate <= '$formCheckout' " 

然后获取 roomID 并统计它们?

非常感谢任何帮助!

【问题讨论】:

  • 你真的应该做一个房间表并分配一个索引来标记它们是否被占用,这真的会为你减轻一切。
  • 您看过本页右侧的一些Related 问题吗?他们可能会给你一些想法?
  • 这里有语法错误checkinDate =&gt;,您需要反转这些符号。 =&gt; 没有做你认为的事情。

标签: php mysql sql


【解决方案1】:

如果你想知道一个房间在一段时间内是否有空房,那么逻辑如下:

SELECT r.*
FROM rooms r 
WHERE NOT EXISTS (SELECT 1
                  FROM bookings b
                  WHERE b.roomid = r.roomid AND
                        b.checkinDate <= $formCheckOut AND
                        b.checkoutDate >= '$formCheckIn
                 );

我不确定这两个是否都需要相等比较。逻辑是,如果没有在退房日期之前开始并在入住日期之后结束的预订,则房间是可用的。

但是,对于十个房间,我可能会建议您每天为每个房间保留一张表格,例如未来十年(每年再增加一次)。这样的表不是很大,可能更容易理解如何使用它。另外,您可以处理一些事情,例如一对夫妇预订一个星期的房间,但前 3 天只有一个人在房间里。

【讨论】:

  • 我认为您在子查询中遗漏了类似于 AND b.roomId = r.Id 的内容
  • @FuzzyTree 。 . .谢谢。
猜你喜欢
  • 2012-03-27
  • 2016-03-29
  • 2016-02-23
  • 2021-07-01
  • 2016-09-23
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多