Une jointure à trois table
8 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
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?
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
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
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
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
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
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Les pays gérés par la Google Toolbar 2.0
- Yahoo Slurp et autres robots d'indexation de Yahoo
- Services et outils de Yahoo! Search
- Parts de marché des moteurs aux USA (Octobre 2006)
- Les visiteurs de WRI apprécient Firefox
- Agent Web Ranking v.2.6.2 s'ouvre à l'Asie
- Liste de sites à PageRank 10 (PR 10)
- Baromètre moteurs de recherche Décembre 2004
- Historique des Google Dance
- Baromètre des outils de recherche
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités








le forum