嗨,我正在 ASP.NET 中从事酒店预订项目。我想制作一个过滤器,以便我可以按日期(例如 6 月 1 日至 6 月 5 日之间)搜索可用房间,然后预订该房间。我该如何将该房间的状态更改为“不可用”期间,以便想要在 5 月 15 日至 30 日之间预订该房间的人可以这样做。房间的状态是我数据库中的布尔值。
到目前为止,我显示了所有可用状态的房间。但是当我在数据库中引入房间时设置了状态。但我不知道如何更改状态以及是否可以在一段时间内将房间的状态设置为 true,然后假的另一个时期
嗨,我正在 ASP.NET 中从事酒店预订项目。我想制作一个过滤器,以便我可以按日期(例如 6 月 1 日至 6 月 5 日之间)搜索可用房间,然后预订该房间。我该如何将该房间的状态更改为“不可用”期间,以便想要在 5 月 15 日至 30 日之间预订该房间的人可以这样做。房间的状态是我数据库中的布尔值。
到目前为止,我显示了所有可用状态的房间。但是当我在数据库中引入房间时设置了状态。但我不知道如何更改状态以及是否可以在一段时间内将房间的状态设置为 true,然后假的另一个时期
首先你的数据库结构不正确。您必须在预订表中有状态字段,以便您每天都有过渡历史记录。
因为在您目前的情况下,您的房间要么全天可用,要么全天关闭。您应该制作一个房间状态表,您应该在其中记录日常状态,并根据该表验证您的房间选择。
将状态的默认值设为 true。因此,默认情况下,每个房间都可以默认预订。
@ianco 斯洛伐克,我真的觉得你必须改变你的数据库结构。
[Status] 字段的目的是显示当前是否有可用房间,不是吗?如果是,那么您可以将其设置为已计算 - 创建一个返回布尔值(您的状态字段类型)的 sql 函数,并检查当前没有保留。
请在此处阅读有关计算字段的更多信息,并在此处阅读有关性能的更多信息
您请求的内容不需要更改数据库结构,并且要支持 MarkP3rry 描述的超时功能,您只需向您的 Reservation 表添加一个字段:BookingDate DATETIME
. 您应该使用预订表检查可用性。如果没有对与提供的开始日期和结束日期重叠的房间进行预订,则该房间在该期间可用,除非预订已被取消。
要确定两个日期之间有哪些房间可用,请使用以下查询:
SELECT r.*
FROM Room r LEFT JOIN Reservation v ON r.RoomID = v.RoomID
AND NOT (@StartDate >= Date_Check_Out OR @EndDate <= Date_Check_In)
AND v.cancel = 0
WHERE v.ReservationID IS NULL
@StartDate
这将为您提供所有在和之间没有保留的房间@EndDate
。您当然可以通过房间状态、房间类型等进一步过滤。此查询假定已完成对提供的日期的验证,即 that@StartDate < @EndDate
和 that Reservation.Check_In_Date < Reservation.Check_Out_Date
。加入将返回所有房间,并且仅返回日期与提供的开始日期和结束日期重叠的预订。添加AND v.cancel = 0
仅包括尚未取消的预订。然后我们过滤掉有任何预订数据的结果,剩下的是两个日期之间的可用房间。