2012-04-23 17 views
0

私は医師のスケジュールページを持っており、医師は月曜日から金曜日までの作業時間(開始時刻と終了時刻)を設定できます。mysql- select特定の時間範囲を超えるレコード

訪問ページを使用することで、ユーザーは医師のスケジュールされた時間内に1日ごとに予定を立てることができます。

私は訪問予定表を使用しており、医師の作業時間を設定するには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エントリー)を持っている必要があります。

質問 医師は、彼/彼女のスケジュール時刻を変更する、私はその特定の日に医師の予定時間を超えて、すべての既存の訪問を知りたいです。

例私が訪問ID 4を見つけたい

1)医師の変更私が訪問IDを見つけたい)

start_time: 12:00:00 
end_time: 17:00:00 

2当たりとして水曜日のための時間を働いた場合4,5医師が勤務時間を変更する場合

水曜日:

start_time: 12:00:00 
end_time: 17:00:00 

木曜日

start_time: 15:30:00 
end_time: 18:00:00 

答えて

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を追加してください。

+0

おかげで、あなたは私の時間を救った。そうでなければ、mysqlはクエリの実行中にエラーを返します。 **操作 '='の照合(latin1_general_cs、IMPLICIT)と(latin1_general_ci、IMPLICIT)の組み合わせが不正です** ** –

関連する問題