因此,我正在设计一个适用于酒店的 Web 应用程序,它最终应该成为为每个酒店网站安装一些额外代码的简便方法。该应用程序使用 php 和 mysql。所以,正如您可能猜到的那样,我对数据库结构感到很困惑。不过,我做了一些研究,我不只是要求一个成熟的预订系统。
因此,酒店的老板必须拥有多种类型的客房。所以我想房间的 table 可能是“必须的”。我们开始吧:
---------- Rooms Table (example)
ID NAME ADULTS ROOM_COUNT PRICE/NIGHT
1 DoubleRoom 2 5 45$
2 Family 3 2 75$
3 Single 1 3 35$
这很简单。 可以通过我的应用程序添加房间,我还会附上适当的描述以及每个房间的各种图片。但让我们回到正题。人们应该进行预订,以便...
---------- Bookings Table (example)
ID ROOM_ID BOOKING_USER CHECKIN (timestamp) CHECKOUT (timestamp)
1 2 A full name 208420842042 308230482042824
2 3 A full name 208423242525 529752972595272
...
所以,这就是 -希望- 数据库结构。现在,我正在考虑一种方法来检查可用性。我知道,这听起来可能很愚蠢,但我想不出一个聪明而简单的方法。在网站的表单中,应该有以下字段:check-in date
和 check-out-date
然后将转换为时间戳和..这里是我卡住的时间!
当我只有上述表格时,如何查询房间的可用性。有什么办法或者我需要更改我的数据库结构吗?即使我设法检查可用性,房间总数 (ROOM_COUNT
) in count 是怎么来的?我的意思是,如何查看多种类型房间的可用性?我想是这样的:
SELECT count(ROOM_ID) FROM bookings WHERE
bookings.checkin < DATE_GIVEN_AS_CHECKIN_INPUT and
bookings.checkout > DATE_GIVEN_AS_CHECKOUT_INPUT
然后根据此查询的输出,我会知道是否有可用房间。但是房间数呢?有没有更好的方法?
如果这里有人可以启发我,我将非常高兴。提前致以最诚挚的问候和感谢,即使是阅读本文!
布兰
附言哦,这不是作业! :P 反正我也不去上学 :D
最佳答案
以下查询将找到所有没有预订的房间,或者在入住/退房输入之前或之后的预订。
SELECT r.*
FROM rooms r
LEFT JOIN bookins b ON b.room_id = r.id
WHERE b.id IS NULL
OR (b.checkout >= DATE_GIVEN_AS_CHECKIN_INPUT AND b.checkin >= DATE_GIVEN_AS_CHECKOUT_INPUT)
OR (b.checkout <= DATE_GIVEN_AS_CHECKIN_INPUT AND b.checkout <= DATE_GIVEN_AS_CHECKOUT_INPUT)
要获取房间数,只需将 SELECT r.*
替换为 SELECT COUNT(DISTINCT r.id)
关于php - 客房和可用日期 PHP/MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12043207/