Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
客房及酒店;PHP/MySQL的可用日期_Php_Mysql - Fatal编程技术网

客房及酒店;PHP/MySQL的可用日期

客房及酒店;PHP/MySQL的可用日期,php,mysql,Php,Mysql,因此,我正在设计一个适用于酒店的web应用程序,它最终将成为一种简单的方法,通过一些额外的代码为每个酒店网站安装。该应用程序正在使用php和mysql。所以,正如您可能猜到的,我对数据库结构非常困惑。不过,我已经做了一些研究,我不仅仅是要求一个完整的预订系统 因此,酒店的业主必须拥有多种类型的房间。所以,我想,一张房间的桌子可能是“必须”的。我们开始: ---------- Rooms Table (example) ID NAME ADULTS ROOM_CO

因此,我正在设计一个适用于酒店的web应用程序,它最终将成为一种简单的方法,通过一些额外的代码为每个酒店网站安装。该应用程序正在使用php和mysql。所以,正如您可能猜到的,我对数据库结构非常困惑。不过,我已经做了一些研究,我不仅仅是要求一个完整的预订系统

因此,酒店的业主必须拥有多种类型的房间。所以,我想,一张房间的桌子可能是“必须”的。我们开始:

---------- 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
...
所以,这就是-数据库结构。现在,我正在考虑一种方法来检查可用性。我知道,这听起来可能很愚蠢,但我想不出一个聪明简单的方法。在网站的形式中,应该有以下字段:
入住日期
退房日期
,然后将其转换为时间戳和。。好吧,这是我卡住的时间

当我只有上面的桌子时,我如何检查房间的可用性。是否有任何方法或我需要更改我的数据库结构?即使我设法检查是否有空房,客房总数是如何计算的呢?我的意思是,我如何检查多种类型房间的可用性?我的想法是:

SELECT count(ROOM_ID) FROM bookings WHERE
bookings.checkin < DATE_GIVEN_AS_CHECKIN_INPUT and
bookings.checkout > DATE_GIVEN_AS_CHECKOUT_INPUT
从预订中选择计数(房间ID),其中
bookings.checkin<日期\u给定\u作为\u checkin\u输入和
bookings.checkout>日期\u作为\u checkout\u输入
然后根据这个查询的结果,我会知道是否有可用的房间。但是房间数呢?还有更好的办法吗

如果这里有人能告诉我这件事,我会很高兴的。最好的问候和感谢提前,即使是阅读此
布兰


哦,这不是家庭作业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)
选择r*
从r房间
在b.room_id=r.id上左连接预订b
其中b.id为NULL
或者(b.checkout>=日期给定\作为签入\输入,b.CHECKIN>=日期给定\作为签入\输入)

或者(b.checkout如果您查看时间线中的请求时段[SDATE,EDATE],则有四个预订案例(1)、(2)、(3)、(4)可以(全部/部分)占用请求时段:

    SDATE    EDATE
      |--------|              <-- requested period

  |--1--|   |--2--|           <-- booking periods
    |-----3------|            <-- relevant for
        |-4--|                <-- occupancy test

|-5-|            |--6--|      <-- periods not relevant 
案例4:

WHERE (b.checkout <= SDATE AND b.checkin >= EDATE)
其中(b.checkout=EDATE)
然后,结合这两种情况,将列出给定时间段[SDATE,EDATE]内已占用房间的所有房间ID的查询为:

SELECT DISTINCT b.roomid FROM bookings AS b
WHERE (b.checout >= SDATE AND b.checkin <= EDATE)
OR (b.checkout <= SDATE AND b.checkin >= EDATE)
从预订中选择不同的b.roomid作为b

其中(b.checout>=SDATE和b.checkin=SDATE和b.checkin所以,我应该搜索免费的房间,而不是在给定的时间内搜索预订的房间?而且,我还没有真正得到
其中b.id为NULL
部分。@Blane该部分将选择从未预订过的房间(即,预订中没有链接回房间的行)。我没有比较这篇文章以确定它是否重复,但我们的右侧确实存在很多房间可用性问题-请参阅相关部分。@halfer我在发布之前做了一项研究。除了我发布的代码(这是stackoverflow回复的一部分)之外,我发现没有任何其他内容与我的要求完全相关。无论如何,感谢您的回复e comment.DateTime值不应该是时间戳,它们应该是作为字符串/日期时间存储在数据库中的日期时间值,这将使您更简单。@Tobyalen是的,但是比较呢?(=)
SELECT DISTINCT b.roomid FROM bookings AS b
WHERE (b.checout >= SDATE AND b.checkin <= EDATE)
OR (b.checkout <= SDATE AND b.checkin >= EDATE)
SELECT r.roomid FROM rooms AS r WHERE r.roomid NOT IN
(
  SELECT b.roomid FROM bookings AS b
  WHERE (b.checout >= SDATE AND b.checkin <= EDATE)
  OR (b.checkout <= SDATE AND b.checkin >= EDATE)
)