2012-04-23 81 views
0

我有一個醫師時間表頁面,醫生可以配置他/她的工作時間(開始時間和結束時間),從星期一到星期五。mysql-選擇超過一定時間範圍的記錄

通過使用訪問頁面,用戶可以安排他們的約會只在醫生預定的時間每天。

我使用的訪問表爲用戶的約會和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
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的所有所有醫生的嚴重預定訪問的。添加一個額外的地方,讓他們只爲一個特定的醫生。

+0

謝謝你,你救了我的時間。在比較兩個字符串之前需要添加'BINARY'關鍵字,否則mysql在執行查詢時返回錯誤 **對於操作'=',非法混合排序規則(latin1_general_cs,IMPLICIT)和(latin1_general_ci,IMPLICIT) – 2012-04-24 07:23:03