目前,我有这个表'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,尽管他已经在那个时期可用。
你有什么办法吗?
提前致谢。
答案 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
是包容性的。因此,您的时间段开始和结束值以及中间值也将被考虑。