Problème de jointures multiples

Problème de jointures multiples - SQL/NoSQL - Programmation

Marsh Posté le 08-10-2004 à 12:03:09    

Bonjour, j'ai une petite base contenant les 5 tables suivantes :
 
Unités
|
exercices
|
questions --- réponses
                       |
                    élèves
 
Je souhaite afficher les questions avec toutes les données qui sont associées.
 
J'ai donc fait une requête du genre :
 
SELECT * FROM question
LEFT JOIN réponse ON (...)
LEFT JOIN élèves ON (...)
JOIN exercice ON (...)
JOIN unité ON (...)
 
Le problème est que si je spécifie un élève qui n'a pas encore de réponse, les questions ne vont pas s'afficher.
 
Est-ce que je devrai faire 2 requêtes ??


Message édité par Noisequik le 08-10-2004 à 12:04:38
Reply

Marsh Posté le 08-10-2004 à 12:03:09   

Reply

Marsh Posté le 08-10-2004 à 12:19:47    

Tu n'as pas d'autres liens que ceux indiqués entre ces tables?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 08-10-2004 à 12:52:49    

hum si après y a pleins d'autres tables (professeurs, catégorie, aide...)
mais qui n'interviennent pas dans ma requête pour l'instant...

Reply

Marsh Posté le 08-10-2004 à 14:38:12    

Pour le moment, tel que tu définis ta question ("Je souhaite afficher les questions avec toutes les données qui sont associées." ), la requète "SELECT * FROM questions" suffit. Donc soit tu expliques mieux ce que tu recherches, soit tu as déjà la réponse.

Reply

Marsh Posté le 08-10-2004 à 14:39:10    

...et si tu n'as effectivement que ça comme liens entre les tables présentées je m'inquiète pour la cohérence de ta structure...:/


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 08-10-2004 à 14:54:36    

Alors en gros je souhaiterais afficher les questions qui correspondent à l'exercice et à l'unité voulus (exemple : les questions de l'exercice 3 de l'unité 4)
 
Ainsi que les réponses qui sont associées à ces questions (généralement vides excepté dans le cas ou l'élève aurait déjà répondu)
 
Skeye : qu'est-ce qu'il y aurait d'inquiétant ? le fait qu'il manque des tables ou que les jointures ne seraient pas suffisantes ?

Reply

Marsh Posté le 08-10-2004 à 15:02:09    

Noisequik a écrit :

Skeye : qu'est-ce qu'il y aurait d'inquiétant ? le fait qu'il manque des tables ou que les jointures ne seraient pas suffisantes ?


J'aurais plutôt dis le fait que si tes réponses ne sont pas des QCMs ton modèle ne tient pas la route.
 
Sinon, je ne vois pas en quoi, tel que tu le décrit, le fait de ne pas avoir les questions sans réponses soit un problème. Mais si tu veux vraiment les avoir, utilises plutôt un mix de inner join avec des outer join

Reply

Marsh Posté le 08-10-2004 à 15:03:10    

Noisequik a écrit :

Alors en gros je souhaiterais afficher les questions qui correspondent à l'exercice et à l'unité voulus (exemple : les questions de l'exercice 3 de l'unité 4)
 
Ainsi que les réponses qui sont associées à ces questions (généralement vides excepté dans le cas ou l'élève aurait déjà répondu)
 
Skeye : qu'est-ce qu'il y aurait d'inquiétant ? le fait qu'il manque des tables ou que les jointures ne seraient pas suffisantes ?


Si tu n'as pas de réponses, étant donné que tu n'as pas d'autre lien entre les questions et les élèves c'est normal que tu ne puisses avoir les élèves...[:skeye]
 
Tout dépend de ce que signifient tes données exactement, en fait...
Par exemple si tu suis un modèle de style universitaire, il me parait difficile à comprendre que les élèves ne soient liés aux unités que via leurs réponses aux exercices de cette unité...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 08-10-2004 à 15:09:05    

C'est à dire que les questions sont les mêmes pour tout le monde.
 
un élève se log, réponds aux questions, et celles-ci seront enregistrées dans la table réponse avec l'identifiant de l'élève.
 
La table réponse contient donc le numéro de la question, la réponse et le numéro de l'élève

Reply

Marsh Posté le 08-10-2004 à 15:17:50    

Bon, dans ce cas ça devrait être bon...quel est le problème exactement? Tu veux obtenir quoi comme résultat avec ta requête? [:urd]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 08-10-2004 à 15:17:50   

Reply

Marsh Posté le 08-10-2004 à 15:21:02    

En fait je voudrais afficher mes questions, ainsi que les réponses associées déjà données par l'élève en question( s'il y en a)
 
Le problème est que si je n'avais pas de réponse, la question ne s'affichait pas.
 
J'ai cependant trouvé une solution (provisoire) en créant des réponses vierges à la première visite d'élève, mais je ne sais pas si c'est la meilleure des solutions

Reply

Marsh Posté le 08-10-2004 à 15:28:25    

et avec un outer join?
http://www.1keydata.com/sql/sqlouterjoin.html


Message édité par skeye le 08-10-2004 à 15:29:08

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 08-10-2004 à 15:49:29    

comme ça ?
 
SELECT * FROM question
LEFT OUTER JOIN réponse ON (...)
LEFT OUTER JOIN élèves ON (...)
JOIN exercice ON (...)
JOIN unité ON (...)  
 
Ca ne change rien :-(
 
Je suis sous mySQL et PHP au fait


Message édité par Noisequik le 08-10-2004 à 15:52:22
Reply

Marsh Posté le 08-10-2004 à 15:51:48    

J'ai pas l'impression que mysql sache faire ce type de jointure...:/


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 08-10-2004 à 15:53:12    

ok merci quand même.
 
je vais rester sur ma solution de créer des réponses vierges, et après je fais des update à la place des insert :-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed