Bonjour,
Je suis en train de m'arracher les cheveux sur une requête SQL.
C'est un sujet de patients dans un hopital. Le but est de savoir la liste des repas qu'ils ont choisi (table choix)
Ils peuvent choisir des repas mais l'hopital peut ne pas leur donner le repas souhaité (table regimerepas).
Dans la table choix il y a deux colonnes qui représentent des booléens : medical (si le repas est une nécessité médicale) et optionnel si c'est un souhait du patient (ne pas manger de viande par exemple).
Pour cette requête je dois afficher pour chaque patient (en plus de leur nom et prénom), la liste des repas qu'ils ont choisi en plus de l'option obligatoire ou souhait.
Ci-dessous les tables :
J'ai commencé à écrire la requête suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 regime (id, nom) id : clé primaire patient (id, nom, prenom, ...) id : clé primaire choix (idpatient, idregime, optionnel, medical) idpatient, idregime : clé primaire idpatient : clé étrangère en réf. à id de patient idregime : clé étrangère en réf. à id de regime repas(dateheure, idpatient) dateheure, idpatient : clé primaire idpatient : clé étrangère en réf. à id de patient regimerepas(dateheure, idpatient, idregime) dateheure, idpatient, idregime: clé primaire dateheure, idpatient : clé étrangère en réf. à (dateheure, idpatient) de repas idregime : clé étrangère en réf. à id de regime
Le problème avec cette requête c'est que je ne sais pas comment je pourrais faire apparaitre la liste des repas choisis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT p.idpatient AS id, p.nom AS nom, p.prenom AS prenom FROM choix AS c INNER JOIN regime AS r ON r.id = c.idregime INNER JOIN patient AS p ON c.idpatient = p.id GROUP BY p.idpatient, p.nom, p.prenom ORDER BY p.nom, p.prenom
Normalement si j'utilise un GROUP BY les champs du SELECT devraient aussi se trouver dans le GROUP BY.
Peut-être que le SELECT je pourrais le transformer en écrivant:
Sinon est-ce que je devrais seulement utiliser des jointures mais dans ce cas comment filtrer par patient ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 SELECT id, nom, prenom, repas, FROM ( SELECT p.idpatient AS id, p.nom AS nom, p.prenom AS prenom, (SELECT idpersonnel, nom AS Liste repas) FROM regime AS r INNER JOIN choix AS c ON r.id = c.idregime GROUP BY idpersonnel, r.nom) FROM choix AS c INNER JOIN regime AS r ON r.id = c.idregime INNER JOIN patient AS p ON c.idpatient = p.id GROUP BY p.idpatient, p.nom, p.prenom), GROUP BY id, nom, prenom ORDER BY nom, prenom
Désolé mais là je suis perdu.
Merci par avance pour votre aide.
Cordialement
Mathieu
Partager