MYSQL - 检查冲突时间

时间:2017-09-28 06:32:10

标签: mysql

目前,我有这个表'tbl_subloading':

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,尽管他已经在那个时期可用。

你有什么办法吗?

提前致谢。

1 个答案:

答案 0 :(得分:5)

您可以使用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')) 

如果de Guzman,J在给定时间段内未被占用,则输出将为0.否则,根据您提供的时隙,它将是正整数值,如1,2。您可以通过提供OR条件来添加许多时段。

请注意,BETWEEN是包容性的。因此,您的时间段开始和结束值以及中间值也将被考虑。