2012-05-29 74 views
0

我的情景:我有一個網站,其中有事件日曆&預訂表爲訪客預訂他們的訪問讓我們說一些花園xyz。當在這個花園裏發生一個事件時,遊客不能去花園。T-SQL查詢使用可用日期填充下拉列表

事件日曆由管理層維護,如果事件發生於2012-06-16直到2012-06-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 

預訂表格有一個下拉列表,它應該顯示可用日期基於一個

  1. 日期未預訂或阻止事件壓延
  2. 如果6月28日50訪問者然後6月28日已經取得預訂在可用的預訂日期表應該不會出現。

我的表結構有點複雜,然後在示例中顯示。

如果有人能以最好的方式做到這一點,我將不勝感激。

我想用一個查詢&隨着其他查詢我試圖從Visitor_Booking表50預訂生成預約日期,以從Event_Calender TableBooked_Dates

這會給我預訂的所有日期。現在我有基於這個被阻止的日期如何生成可用於訪問的日期。

CTE查詢,以便從日曆甚至產生被預訂日期

注:與查詢結果的一個問題一直結果是相關的查詢獲取比指定日期舊的結果。這是由於運算符優先級

RESULT

腳本至今:

;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) 
+0

我完成了Event Calender與Full Calender的集成,以便我可以從Event_Calender生成預訂日期。我正在尋找實現的想法,因爲我想使用sql查詢生成日期,而不是根據已經預訂的日期在C#中編寫一些邏輯。我將添加和圖像顯示我的CTE查詢,即使這給我一點不想要的結果,因爲它也顯示日期的結果,這些日期的結果少於where子句中的指定日期。我將在片刻中添加圖像。 – Learning

+0

把問題的查詢,讓其他人可以建議你改善查詢或錯誤。 –

+0

查詢也是問題的一部分 – Learning

回答

0
  1. 獲取日期安排花園是徒勞的事件
  2. 獲取該園日期已達到完全訪問量(== 50)

  3. 聯合收割機1分2的結果

  4. 選擇壓延顯示/選擇預訂/訪問日期
  5. 在壓延機的加載/月的變化情況,不知何故禁用步驟收到的日期3

看到此示例代碼:

static List<DateTime> lstBookedDates; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      lstBookedDates = new List<DateTime>(); 
      lstBookedDates.Add(DateTime.Today); 
      lstBookedDates.Add(DateTime.Today.AddDays(2)); 
      lstBookedDates.Add(DateTime.Today.AddDays(-2)); 
      lstBookedDates.Add(DateTime.Today.AddMonths(1)); 
      lstBookedDates.Add(DateTime.Today.AddMonths(1).AddDays(2)); 
     } 
    } 

    protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) 
    { 
     if (lstBookedDates.Where(a=> e.Day.Date.ToShortDateString().Equals(a.Date.ToShortDateString())).Count()>0) 
     { 
      foreach (Control c in e.Cell.Controls) 
      { 
       if (typeof(LiteralControl) == c.GetType()) 
       { 

        LiteralControl c1 = (LiteralControl)c; 
        c1.Text = ""; 
       } 
      } 
      e.Cell.BackColor = System.Drawing.Color.Gray; 
      e.Cell.ToolTip = "Booking full"; 
      e.Cell.Enabled = false; 

     }   
    }