2012-05-03 26 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