0

我有一个医生计划页面,医生可以配置他/她的工作时间(开始时间和结束时间)从星期一到星期五。

通过使用访问页面,用户只能在每天的医生预定时间内安排他们的约会。

我正在使用访问表来进行用户的约会,并使用医师时间表来配置医师的工作时间。

访问表条目

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

医生时间表表条目

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
4

1 回答 1

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 来为特定的医生获取它们。

于 2012-04-23T16:51:03.360 回答