2012-05-03 11 views
1

こんにちは、私はASP.NETのホテル予約プロジェクトに取り組んでいます。フィルターをかけて、日付(例えば6月1日から6月5日まで)の部屋を検索し、その部屋を予約した後にその部屋の状況を「利用できません」に変更するにはどうしたらいいですか? 15から30の間でその部屋を予約したいと思う誰かがit.Statusをすることができるように、私のデータベースのブール値です。これまでのところ、私は私はのステータスを設定することが可能である場合、ステータスを変更する方法を知っているといけないdatabase.Butで部屋を導入する際、ステータス利用可能.Butを持つすべての部屋が、ステータスが設定されている表示特定の日付範囲のブール値を変更する

enter image description here

ある期間は真の部屋、別の期間は偽の部屋

+0

ちょうど私達がすべて理解している - Ticketmasterのようなことをしたいのですが、誰かが予約プロセスを通過している間に部屋が予約されなくなってしまいます(そして、「この部屋を予約するのに2分かかります')? – markp3rry

+0

はい、このようなものです。私はA期間のための部屋を予約し、その後、その期間の部屋は予約できなくなります。 – jonny

+0

ianco、私の説明を確認 –

答えて

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つの日付間の利用可能な部屋です。

+0

これは私が探していたありがとうありがとう。今私はそれを実装しようとするが、私はlinqに変換する必要があり、どのように私はそれを解決する方法を知っている必要はありません。 – jonny

0

まず、あなたのデータベース構造は間違っています。移行日を賢明にするためには、予約テーブルにステータス項目が必要です。

あなたの現在の状態では、あなたの部屋は1日中利用可能になるか、または1日中オフになるためです。毎日のステータスの記録を持ち、そのテーブルに基づいて部屋の選択を検証する必要がある部屋状況テーブルを作成する必要があります。

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

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

+0

私は本当に私のroomstatusテーブルに保存するshoulを理解していない? ReservationID、RoomID、ステータス、Date? – jonny

+0

正確には、これらすべてのフィールドがroomstatusテーブルに必要です。このテーブルには、毎日すべてのルームに対して1つのエントリが必要です。 –

0

[ステータス]フィールドの目的は、現在客室が利用可能かどうかを表示することです。 yesの場合は、Computedとして設定できます - ブール値(ステータスフィールドのタイプ)を返すSQL関数を作成し、現在の瞬間の予約がないことをチェックします。

計算フィールドhereについての詳細を読んでも、パフォーマンスに関するしてくださいhere

関連する問題