2012-04-23 3 views
0

J'ai une page de planification de médecin et le médecin peut configurer son temps de travail (heure de début et heure de fin) du lundi au vendredi. En utilisant la page des visites, les utilisateurs peuvent programmer leurs rendez-vous uniquement dans les délais prévus par le médecin pour chaque jour. J'utilise le tableau des visites pour les rendez-vous de l'utilisateur et le tableau médecin_schedules pour configurer le temps de travail du médecin.mysql- sélectionner les enregistrements qui dépassent certains intervalles de temps

entrées de la table des visites

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 entrées de table

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 

Remarque Chaque médecin devrait avoir qu'une seule entrée pour chaque jour (totalement 5 entrées).

Question lorsque le médecin changeant son/son temps de calendrier, je veux trouver toutes les visites existantes dépassant le temps de calendrier médecin ce jour-là.

Exemple

1) Je veux trouver des visites id 4 si le temps de travail changement médecin pour mercredi selon

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

2) Je veux trouver des visites id 4,5 si le médecin change après le temps de travail

mercredi:

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

jeudi

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

Répondre

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) 

Ceci renverra toutes les ids pour tous les pour tous les médecins des visites mal programmées. Ajouter un O WH supplémentaire pour les obtenir pour un médecin en particulier.

+0

Merci l'homme, vous avez sauvé mon temps. On change ce besoin d'ajouter le mot clé 'BINARY' avant de comparer deux chaînes, sinon mysql renvoie des erreurs lors de l'exécution de la requête ** Mélange illégal de classements (latin1_general_cs, IMPLICIT) et (latin1_general_ci, IMPLICIT) pour l'opération '=' ** –

Questions connexes