2012-05-03 29 views
1

嗨我正在研究ASP.NET中的酒店预订项目。我想制作一个过滤器,以便可以按日期搜索可用房间(例如6月1日至6月5日之间),之后预订该房间。如何将该房间的状态更改为“不可用”期间,以便有人希望在15月15日至30日之间预留该房间可以做到这一点。房间的状态是我的数据库中的布尔值。更改某些日期范围的布尔值

enter image description here

到目前为止,我显示所有房间与状态可用。但是当我介绍database.But房间我不知道如何改变现状的状态设置,如果它是可以设置的状态一个房间在一段时间内为真,然后在另一个时段为假

+0

只是为了让大家都明白 - 您是否想要像Ticketmaster那样做某些事情,当某人正在通过预订流程时,它可以阻止预订房间(也可能会说'您有两分钟时间预订这个房间“)? – markp3rry

+0

就是这样。我预留了一段时间的房间,之后该房间将不再提供该时段的预订。 – jonny

+0

ianco,查看我的描述 –

回答

0

不需要你请求的数据库结构的变化,并支持MarkP3rry描述的超时功能,你只需要在预订表中添加一个字段: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 

这会给你所有这一切都毫无保留的反对则@EndDate之间@StartDate和房间。您当然可以通过房间状态,房间类型等进一步过滤此查询。假设在提供的日期进行了验证,即@StartDate < @EndDateReservation.Check_In_Date < Reservation.Check_Out_Date。该加入将返回所有房间,并且只有其日期与提供的开始和结束日期重叠的预订。添加AND v.cancel = 0仅包含尚未取消的预订。然后,我们筛选出包含任何预订数据的结果,剩下的是两个日期之间的可用房间。

+0

谢谢你,这就是我正在寻找的。现在我会尝试实现它,但我需要将它转换为LINQ并不知道如何,但我会以某种方式解决它。 – jonny

0

首先,您的数据库结构不正确。您必须在预订表中具有状态字段,以便您可以明智地了解过渡历史。

因为在您目前的情况下,您的房间可能全天有空,或整天都会关闭。您应该创建一个房间状态表,在该表中您应该有每日状态记录并根据该表格验证您的房间选择。

使状态的默认值为true。因此,默认情况下,每个房间默认都可以预订。

@ianco斯洛伐克,我真的觉得你必须改变你的数据库结构。

+0

我真的不明白我在roomstatus表中保存了什么? ReservationID,RoomID,状态和一些日期? – jonny

+0

准确地说,您需要在roomstatus表中填写所有这些字段,并且此表格每天必须为每个房间设置一个条目。 –

0

[Status]字段的目的是显示房间是否可用,不是吗? 如果是,那么你可以将它设置为计算 - 创建一个返回布尔值(你的状态字段的类型)的sql函数,并检查当前没有预留。

请阅读更多有关计算领域here也关于性能here