私のシナリオ:訪問者が訪問を予約するためのイベントカレンダーと予約フォームを備えたWebサイトがあります。ガーデンxyzとしましょう。この庭園でイベントが行われている場合、訪問者は庭園を訪問できません。
イベントカレンダーは管理者によって管理されており、イベントが2012年6月16日から2012年6月20日まで開催されている場合、このイベントでは訪問者のために庭を閉鎖します。
予約の反対側では、ドロップダウンまたはポップアップカレンダーで訪問者の利用可能な日付を表示する必要があります。これにより、イベントカレンダーで予約された日付がブロックされます。
イベントデータは、次のようなフィールドを持つEvent_Calenderテーブルに保存されます
Event_ID
Event_Name
Event_Start_Date
Event_End_Date
Event_Start_Time
Event_End_Time
Event_Block_Visitor
重要いつでも50人の訪問者だけが庭を訪問することができます そして訪問者データはVisitor_Bookingテーブルテーブル構造に保存されます
Booking_ID
Booking_Date
Visitor_Name
No_Of_Visitor
EMail_ID
Contact_No
予約フォームには、利用可能な日付を表示するドロップダウンがあります。
- イベントカレンダーで予約またはブロックされていない日付
- 6月28日がすでに50人の訪問者を予約している場合、6月28日は利用可能な予約日のテーブルに表示されないはずです。
私のテーブル構造は少し複雑で、例に示されています。
誰かがこれを最善の方法で行うことができれば幸いです。
Booked_Dates
1つのクエリを使用して生成しようとしていEvent_Calender Table
ます。他のクエリを使用して、Visitor_Booking
テーブルから50件の予約で予約済みの日付を生成しようとしています。
これにより、予約されているすべての日付がわかります。これに基づいてブロックされた日付があります。訪問に使用できる日付を生成するにはどうすればよいですか。
偶数カレンダーから予約日を生成するCTEクエリ
注:クエリ結果の問題の1つは、指定された日付より古い結果をフェッチするクエリに関連する結果です。オペレーターの優先順位によるものでした
これまでのスクリプト:
;WITH Calendar
AS (SELECT EventID,
EventTitle,
EventStartDate,
EventEndDate,
EventEnumDays,
EventRecurring,
EventStartTime,
EventEndTime,
EventStartDate AS PlannedDate,
EventType,
EventCategory
FROM EventCalender
WHERE EventActive = 1
AND LanguageID = 1
AND EventBlockDate = 1
UNION ALL
SELECT EventID,
EventTitle,
EventStartDate,
EventEndDate,
EventEnumDays,
EventRecurring,
EventStartTime,
EventEndTime,
Dateadd(dd, 1, PlannedDate),
EventType,
EventCategory
FROM Calendar
WHERE EventRecurring = 1
AND Dateadd(dd, 1, PlannedDate) <= EventEndDate)
SELECT EventID,
EventStartDate,
EventEndDate,
PlannedDate AS [EventDates],
EventStartTime,
EventEndTime,
Cast(EventStartDate AS DATETIME) + '' + Cast(EventStartTime AS DATETIME) AS DT,
EventTitle,
EventType,
EventCategory,
Datename(weekday, PlannedDate) AS [WEEKDAY],
Getdate() AS [YYYY/MM/DD]
FROM Calendar
WHERE PlannedDate >= Getdate()
AND ',' + EventEnumDays + ',' LIKE '%,' + Cast(Datepart(dw, PlannedDate) AS CHAR(1)) + ',%'
OR EventEnumDays IS NULL
ORDER BY EventID,
PlannedDate
OPTION (maxrecursion 0)