2015-04-08 54 views
-1

我正在嘗試構建類計劃系統如何在添加新計劃之前檢查重複計劃

計劃具有類似Daily,Weekly,Monthly的重複類型。

現在我無法檢查新日程表將已經存在的/在另一時間表等之間,

我的表單的字段

Class ID, 
Time [Day Schedule Time], 
Start [When Schedule Starts], 
End [When will Schedule Ends], 
Repeat [Daily, Weekly, Monthly] 

平均值,而我試試這個,但它不適用於每週,每月和每年

SELECT * 
FROM `schedule` 
WHERE '2015-04-09 06:17:17' <= startdt 
AND '2015-04-10 06:17:17' >= enddt 
AND TYPE = 'daily' 
AND (
(
'03:07:00' NOT 
BETWEEN TIME 
AND endtime 
) 
AND (
'04:14:00' NOT 
BETWEEN TIME 
AND endtime 
) 
AND (
TIME NOT 
BETWEEN '04:07:00' 
AND '04:07:00' 
) 
) 
LIMIT 0 , 30 
+0

以什麼方式無法檢查?你過得怎麼樣?您是否正在編寫一些SQL來進行檢查並將其粘貼到數據庫客戶端中,或者您是否想使用PHP來執行此操作? – halfer

+0

我想用SQL SERVER來做這件事,或者PHP邏輯也會對我有所幫助 – rak

+0

好的,你的編輯是一個好的開始 - 我們現在可以看到你在做什麼。但是,這是可能起作用的「日常」查詢 - 我們是否也可以看到一個不工作的查詢?它以什麼方式「不起作用」?你有沒有嘗試取出'WHERE'子句來查看哪一個導致它失敗? – halfer

回答

1

您能澄清一下嗎?創建新時間表時,您是否創建了所有重複條目,並且您正在嘗試檢查在添加其他重複時間表之前是否會有衝突?

我假設開始相當於一個日期,而你的課程是固定的時間段,即1小時?所以你的解包數據可能看起來像這樣? (簡化的一些標準化)

CalendarEntries ScheduleID ClassroomID 日期 開始時間(固定持續時間假定 - 如果不是,添加結束時間

上述被填充一次的時間表是OK」 d,並且可以容納所有教室,日期和時間?

如果你要創造你可能會產生所有你提出的新條目到一個臨時表具有相同結構,那麼一個新的時間表:

... 
IF EXISTS (
SELECT TOP 1 * 
FROM #PlannedEntries A 
INNER JOIN CalendarEntries B 
ON A.Date = B.Date 
AND A.ClassroomID = B.ClassroomID 
AND ( 
A.StartTime BETWEEN B.StartTime AND DATEADD(MIN,@LessonDuration,B.StartTime) 
     OR 
DATEADD(MIN,@LessonDuration,A.StartTime) BETWEEN B.StartTime AND DATEADD(MIN,@LessonDuration,B.StartTime) 
    OR 
(A.StartTime < B.StartTime AND DATEADD(MIN,@LessonDuration,A.StartTime) > DATEADD(MIN,@LessonDuration,B.StartTime) 

) 
    PRINT 'Schedule Conflict' 
ELSE 
BEGIN 
    PRINT 'Schedule Added' 
    INSERT INTO CalendarEntries SELECT * FROM #PlannedEntries 
END 

你要考慮的主題和資源,即員工可以推測。 添加一些說明,我會看看我是否可以在正確的方向指向你,當我回來;)

注 - 這是混亂。我會分開開始和結束時間,你可以簡化上述。如果你有一個「插槽」系統,而不是基於時間的話,那麼它也簡單得多。還有更好的方法來構建它 - 讓我知道,如果這是你遇到的問題,我會改進它。

+0

通常傾向於在評論中提出澄清問題,因爲如果OP沒有回覆,則有一個風險,即永久停留的答案包含更多的問題而不是幫助。我接受但是你還不能直接評論帖子 - 幾乎在那裏! OP可能希望在PHP中這樣做,並且_personally_我會等到他們展示更多的努力。不過,這看起來很有幫助。 – halfer