0

医師のスケジュール ページがあり、医師は月曜日から金曜日までの勤務時間 (開始時間と終了時間) を設定できます。

訪問ページを使用することにより、ユーザーは毎日の医師のスケジュールされた時間内にのみ予約をスケジュールできます。

ユーザーの予約には visits テーブルを使用し、医師の勤務時間を構成するには doctor_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

doctor_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

注記各医師は、1 日につき 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 に答える