我手头上的表格如下:
CUSTOMERS (CustomerID, firstname, surname etc)
ROOMS (RoomID, RoomType, Description)
BOOKING (BookingID, CustomerID, Arrival Date, Departure Date, number of people, total cost)
ROOMS_BOOKED (BookingID, RoomID)
用户输入到达和离开两个日期。然后查看是否有空房。有一个房间是我自己在数据库里输入的。因此,现在的预订表包括BookingID=1、CustomerID=1、到达日期=24/03/2015、出发日期=26/03/2015、人数=1、总成本=40.00。然后在Roomes_Booked表中,我有BookingID=1和RoomID=2,这是一个标准房间。
我正在使用这个SQL代码-
SELECT RoomType FROM ROOMS WHERE RoomID NOT IN (SELECT RoomID FROM ROOMS_BOOKED)
此查询返回尚未预订的房间,但不是我要查找的房间。例如,用户选择的日期与在数据库中预订的日期相同。因此,我希望能够在下一页显示所有房间类型,并显示在所选日期预订的特定房间类型的x或其他名称,类似于www.galgorm.com。
我在这方面需要帮助,每次我发布关于这个问题的问题时,我都得不到答案或某种形式的帮助。到目前为止,我已经完成了这个酒店系统的设计,我现在希望能够完成它。
请帮帮我,我相信有时候你也遇到过同样的情况需要帮助。
5条答案
按热度按时间mcdcgff01#
您有以下案例
你将不得不找出哪些时期会交叉。显然,案例1和案例2是免费的。案例3、5、6很容易捕捉,因为如果预订的开始日期或结束日期在用户的选择范围内,您可以进行搜索。案例4和案例7您需要确定用户的选择日期是否在预订之间。
因此,以下内容可以找到空闲房间:
pxiryf3j2#
此查询列出所有房间,并显示每个房间在[到达,出发]日期内是否可用
yqkkidmi3#
当满足以下两个条件时,就会发生预订冲突
1.已有记录签入日期<inComingRequestcheckout 日期
1.已有记录checkout 日期>来电申请签入日期
注意:现有记录CheckinInDates与传入请求的CheckoutDate进行比较,反之亦然
让我们假设传入请求参数:
包含一些现有预订的预订表:
用于获取所有冲突预订的实际查询:
输出(所有冲突的预订):
Bookking_id 4被排除在外,因为已有预订的客户在该客户登记入住时刚从酒店退房。
Bookking_id 5被排除在外,因为已有预订的客户将在该客户退房时入住酒店。
因此,bookking_id 4和5实际上并不与传入请求冲突
svdrlsy44#
以下是我用来检查不可用房间的示例查询,该查询将返回不可用房间
l2osamch5#
SELECT*FROM ROOM RM WHERE rm.Room_id NOT IN(SELECT DISTINCT Room_id from Booking bk WHERE(bk.到站日期介于‘$From_Date’和‘$To_Date’之间))OR(bk.到达日<‘$From_Date’AND bk.Designment_Date>‘$To_Date’))