Une jointure à trois table
8 messages
• Page 1 sur 1
- bigjet
- WRInaute discret

- Messages: 211
- Inscription: 21 Nov 2004
Une jointure à trois table
Bonjour à tous,
Je sollicite votre aide pour résoudre un problème de jointure.
En fait, j'ai trois tables (Mysql), dont une qui sert à faire un lien entre les deux autres.
Voici une structure simplifiée des tables avec les champs pertinents.
Jusque la rien de très compliqué, la table "reponses" permet de stocker qui a répondu à quelle question.
La requête que je dois réaliser c'est pour un utilisateur donné, de lister toutes les questions répondues ou pas. Si la question n'est pas répondue, les champs réponses doivent être à NULL.
J'ai essayé de regarder du côté des jointures LEFT, qui garantissent que la table de gauche contiendra toutes les lignes (dans ce cas toutes les questions) mais j'ai pas réussi à trouver le résultat voulu.
Pensez-vous qu'il est possible de réaliser cette requête?
Je sollicite votre aide pour résoudre un problème de jointure.
En fait, j'ai trois tables (Mysql), dont une qui sert à faire un lien entre les deux autres.
Voici une structure simplifiée des tables avec les champs pertinents.
- Code: Tout sélectionner
questions(idq, ques)
utilisateurs(idu, nom)
reponses(idq, idu, rep)
Jusque la rien de très compliqué, la table "reponses" permet de stocker qui a répondu à quelle question.
La requête que je dois réaliser c'est pour un utilisateur donné, de lister toutes les questions répondues ou pas. Si la question n'est pas répondue, les champs réponses doivent être à NULL.
J'ai essayé de regarder du côté des jointures LEFT, qui garantissent que la table de gauche contiendra toutes les lignes (dans ce cas toutes les questions) mais j'ai pas réussi à trouver le résultat voulu.
Pensez-vous qu'il est possible de réaliser cette requête?
-

Kaliiii - WRInaute impliqué

- Messages: 602
- Inscription: 2 Mar 2005
Effectivement c'est bien LEFT JOIN qui permet de lier les tables de cette facon. Si tu as des doublons dans tes résultats tu peux utiliser un GROUP by champ_commun
Lis bien la doc de Mysql sur LEFT JOIN, moi je l'utilise pour lier deux a trois tables fréquement, ca marche correctement
Lis bien la doc de Mysql sur LEFT JOIN, moi je l'utilise pour lier deux a trois tables fréquement, ca marche correctement
- lefou
- WRInaute discret

- Messages: 131
- Inscription: 7 Juin 2005
A mon avis (et si j'ai bien compris la question) il faudrait déjà revoir les tables car les questions ne sont rattachées à aucun utilisateur. Je verrais plutôt :
utilisateurs(idu, nom)
questions(idq, ques, utq)
reponses(idr, rep, qrep,utrep)
où
utq => utilisateur ayant posté la question
qrep => question rattachée à la réponse
utrep => utilisateur ayant posté la réponse
Ensuite la requête (à vérifier) :
utilisateurs(idu, nom)
questions(idq, ques, utq)
reponses(idr, rep, qrep,utrep)
où
utq => utilisateur ayant posté la question
qrep => question rattachée à la réponse
utrep => utilisateur ayant posté la réponse
Ensuite la requête (à vérifier) :
- Code: Tout sélectionner
"select u.nom, q.ques, r.rep from utilisateurs as u, questions as q left join reponses as r on (r.qrep = q.idq) where q.utq = u.idu and u.idu = ".$nom_utilisateur
-

reglysse - WRInaute discret

- Messages: 150
- Inscription: 19 Avr 2006
Pas besoin de joindre les trois tables je pense :
J'ai testé ça marche, ça renvoit bien toutes les questions et si l'idu n'a pas répondu à une question, tu as "NULL" dans reponses.rep
- Code: Tout sélectionner
SELECT questions.idq, questions.ques, reponses.rep
FROM questions LEFT JOIN reponses ON questions.idq = reponses.idq
WHERE reponses.idu = $idu OR reponses.idu is null
J'ai testé ça marche, ça renvoit bien toutes les questions et si l'idu n'a pas répondu à une question, tu as "NULL" dans reponses.rep
- bigjet
- WRInaute discret

- Messages: 211
- Inscription: 21 Nov 2004
Premièrement, merci à tous ceux qui se sont donnés la peine de se pencher sur le problème.
En effet reglysse, je me suis rendu compte en allant me coucher hier soir qu'on avait besoin que de deux tables.
Cependant, es-tu sur que ta requête fonctionne? Chez moi, ça ne retourne pas les questions non répondus.
En jouant un peu avec la requête, je me suis rendu compte que celle-ci semblait fonctionner:
(remarquer l'absence du WHERE)
et celle-ci marche tout autant
En effet reglysse, je me suis rendu compte en allant me coucher hier soir qu'on avait besoin que de deux tables.
Cependant, es-tu sur que ta requête fonctionne? Chez moi, ça ne retourne pas les questions non répondus.
En jouant un peu avec la requête, je me suis rendu compte que celle-ci semblait fonctionner:
- Code: Tout sélectionner
SELECT questions.idq, questions.ques, reponses.rep
FROM questions LEFT JOIN reponses ON questions.idq = reponses.idq AND reponses.idu = $idu OR reponses.idu is null
(remarquer l'absence du WHERE)
et celle-ci marche tout autant
- Code: Tout sélectionner
SELECT questions.idq, questions.ques, reponses.rep
FROM questions LEFT JOIN reponses ON questions.idq = reponses.idq AND reponses.idu = $idu
-

reglysse - WRInaute discret

- Messages: 150
- Inscription: 19 Avr 2006
Ah bon ça marche pas chez toi, pourtant j'ai testé moi ça marche...
Mais bon tu as trouvé une autre requête qui fonctionne, c'est cool.
Par contre il faut peut-être juste rajouter des parenthèses pour être sur :
Mais bon tu as trouvé une autre requête qui fonctionne, c'est cool.
Par contre il faut peut-être juste rajouter des parenthèses pour être sur :
- Code: Tout sélectionner
SELECT questions.idq, questions.ques, reponses.rep
FROM questions LEFT JOIN reponses ON questions.idq = reponses.idq AND (reponses.idu = $idu OR reponses.idu is null)
8 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- problème de jointure de table avec SUM et GROUP BY
- [sql] Tri d'une table selon un champ dans une autre table
- Enregistrements non compris dans une jointure SQL
- Comment simplifier une double requête par jointure?
- (Résolu par une jointure)[MYSQL] Dissocier ma requête ?
- Image de fond qui se répète : avoir une belle jointure...
- Comment créer une table dans une base de données
- affichage d`une image avec des champs d`une autre table
- afficher une table SQL dans un tableau / faire une recherche
- definir une variable apres un insert dans une table en php.
- Les pays gérés par la Google Toolbar 2.0 - 26-06-2003
- Yahoo Slurp et autres robots d'indexation de Yahoo - 07-03-2004
- Services et outils de Yahoo! Search - 17-02-2004
- Parts de marché des moteurs aux USA (Octobre 2006) - 04-12-2006
- Les visiteurs de WRI apprécient Firefox - 24-03-2005
- Agent Web Ranking v.2.6.2 s'ouvre à l'Asie - 09-05-2005
- Liste de sites à PageRank 10 (PR 10) - 07-09-2008
- Baromètre moteurs de recherche Décembre 2004 - 26-01-2005
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités



