1

Hi I am working on a Hotel Reservation Project in ASP.NET. I want to make a filter so that I can search the room available by date (for example between 1 June and 5 June) and after that reserve that room .How can I do to change status of that room to "not available" for that period,so that somebody who want to reserve that room between 15 may and 30 may can do it.Status of the room is boolean value in my database.

enter image description here

So far i display all room with status available .But the status is set when i introduce the room in database.But I dont know how to change the status and if it is possible to set status of a room as true for a period and then false for another period

4

3 に答える 3

0

まず、データベース構造が正しくありません。移行履歴を 1 日ごとに取得できるように、予約テーブルにステータス フィールドが必要です。

あなたの現在の状態では、あなたの部屋は終日利用できるか、終日オフになります。日々の状況を記録する部屋状況表を作成し、その表に基づいて部屋の選択を検証する必要があります。

ステータスのデフォルト値を true にします。そのため、デフォルトではすべての部屋がデフォルトで予約可能になります。

@ianco slovak、データベース構造を変更する必要があると本当に感じています。

于 2012-05-03T08:41:08.770 に答える
0

要求しているものにデータベース構造の変更は必要ありません。また、MarkP3rry で説明されているタイムアウト機能をサポートするには、予約テーブルに 1 つのフィールドを追加するだけで済みますBookingDate DATETIME。予約表を使用して空き状況を確認する必要があります。指定された開始日と終了日が重なる部屋の予約がない場合、予約がキャンセルされない限り、その期間は部屋を利用できます。

2 つの日付の間に利用可能な部屋を特定するには、次のクエリを使用します。

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。もちろん、部屋のステータス、部屋のタイプなどでこれをさらにフィルタリングすることもでき@StartDate < @EndDateますReservation.Check_In_Date < Reservation.Check_Out_Date。結合により、すべての部屋が返され、日付が指定された開始日と終了日に重なる予約のみが返されます。AND v.cancel = 0キャンセルされていない予約のみを含めるように追加します。次に、予約データを含む結果を除外します。残っているのは、2 つの日付の間に利用可能な部屋です。

于 2012-05-03T12:06:07.220 に答える
0

[ステータス] フィールドは、現在空室があるかどうかを示すためのものですよね。はいの場合は、計算済みとして設定できます-ブール値(ステータスフィールドのタイプ)を返すSQL関数を作成し、現時点で予約がないことを確認します。

計算フィールドについてはこちらを、パフォーマンスについてはこちらをお読みください

于 2012-05-03T08:56:36.173 に答える