あなたが要求している、と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つの日付間の利用可能な部屋です。
ちょうど私達がすべて理解している - Ticketmasterのようなことをしたいのですが、誰かが予約プロセスを通過している間に部屋が予約されなくなってしまいます(そして、「この部屋を予約するのに2分かかります')? – markp3rry
はい、このようなものです。私はA期間のための部屋を予約し、その後、その期間の部屋は予約できなくなります。 – jonny
ianco、私の説明を確認 –