我有一个医生日程表页面,医生可以从星期一到星期五配置他/她的工作时间(开始时间和结束时间)。
通过使用访问页面,用户可以在每天的医生预定时间内安排他们的预约。
我正在使用访问表进行用户约会,使用physician_schedules表来配置医生的工作时间。
访问表格条目
id visit_date scheduled_intime scheduled_outtime physician_id
1 2012-04-23 09:15:00 09:30:00 1
2 2012-04-23 09:31:00 10:00:00 1
3 2012-04-24 10:00:00 10:15:00 1
4 2012-04-25 11:00:00 11:15:00 1
5 2012-04-26 15:15:00 15:30:00 1
6 2012-04-27 16:00:00 16:30:00 1
physician_schedules表条目
id start_time end_time day_of_week physician_id
1 09:00:00 18:00:00 monday 1
2 10:00:00 18:00:00 tuesday 1
3 11:00:00 17:00:00 wednesday 1
4 15:00:00 18:00:00 thursday 1
5 16:00:00 20:00:00 friday 1
注意每位医生每天应该只有一个条目(共5个条目)。
问题 当医生改变他/她的日程安排时间时,我想找出在特定日期超过医生安排时间的所有现有访问。
示例
1)如果医生按照
更改周三的工作时间,我想找到 id 4 的访问次数start_time: 12:00:00
end_time: 17:00:00
2)如果医生在工作时间后更换,我想找到 id 4,5 的访问次数
星期三:
start_time: 12:00:00
end_time: 17:00:00
星期四
start_time: 15:30:00
end_time: 18:00:00
答案 0 :(得分:0)
SELECT visits.id FROM visits INNER JOIN physician_schedules
ON visits.physician_id = physician_schedules.id
WHERE
UPPER(day_of_week) = UPPER(DAYNAME(visit_date))
AND (scheduled_intime < start_time OR scheduled_outtime > end_time)
这将返回所有医生所有错误安排的访问的所有ID。添加一个额外的WHERE,以便为特定的医生提供它们。