2017-09-28 40 views
4

目前,我有這個表「tbl_subloading」:MYSQL - 檢查相沖突時

teacher_name | start_time | end_time 
de Guzman, J | 08:00AM  | 10:00AM 
Harris, M  | 07:00AM  | 09:00AM 

我想是我的計劃,以檢測是否給予一定的時間表老師已經重疊他/她現有的時間表。例如,'de Guzman,J'從9點到11點不再有任何課程,因爲他已經不在了。

我想這個查詢,我看到來自不同的線程來:

SELECT (COUNT(*) = 0) AS Available FROM tbl_subloading 
WHERE `teacher_name` = 'de Guzman, J' 
AND ((start_time <= '07:00AM' AND end_time >= '07:00AM') 
OR (start_time <= '08:00AM' AND end_time >= '08:00AM')); 

這個查詢輸出1,如果他是可用於特定的時期,否則爲0。 例如,如果de Guzman,J從下午12點到下午1點給出時間表,則它輸出1.但是如果de Guzman,J從上午10點到上午11點給出時間表,則它輸出0,儘管他已經在那段時間可用。

有沒有其他辦法可以做到這一點?

在此先感謝。

回答

4

您可以通過用戶BETWEEN來簡化查詢。

SELECT (COUNT(*)) AS Available 
FROM tbl_subloading 
WHERE teacher_name = 'de Guzman, J' 
AND ((start_time BETWEEN '07:00AM' AND '08:00AM') OR (start_time BETWEEN '08:00AM' AND '09:00AM')) 

如果古茲曼,J不是給定的時間段之間佔據,輸出將是0,否則,根據所提供的時隙,這將是像1,2-正整數值。您可以通過提供OR條件來添加多個時間段。

請注意,BETWEEN是包容性的。因此您的時間段開始和結束值以及兩者之間的值也將被考慮。

+0

仍然不適用於我。即使他在該時間段內不再可用,它也提供0。 –

+0

像這樣使用符合mySQL的日期格式來嘗試。 start_time BETWEEN'2010-01-30 14:15:55'AND'2010-09-29 10:15:55' –