J'ai un tableau de réponses qui énumère les réponses possibles pour une question donnée.Gauche Rejoindre plusieurs ensembles de tables
possible_answer
id question_id text
1 1 yes
2 1 no
3 2 red
4 2 blue
5 2 green
J'ai une table de réponses que les utilisateurs ont donné
user_answer
id user_id answer_id
1 10 1
2 10 3
3 11 1
4 11 4
5 12 2
6 12 5
Je suis en train de créer une requête MySQL qui me montrera le nom d'utilisateur, la réponse de l'utilisateur pour la question 1 (pourrait être nulle) et la réponse de l'utilisateur pour la question 2 (pourrait être nulle). Je suis coincé parce que j'ai l'impression de devoir regrouper plusieurs JOINTES GAUCHES ensemble, mais je reçois un résultat qui me donne l'une des réponses, ou la même réponse dans les deux colonnes.
Voici ce que j'ai à ce moment:
SELECT u.name, pa1.text, pa2.text
FROM user u
LEFT JOIN user_answer ua1 ON u.id = ua1.user_id
LEFT JOIN possible_answer pa1 ON ua1.answer_id = pa1.id AND pa1.question_id = 1
LEFT JOIN user_answer ua2 ON u.id = ua2.user_id
LEFT JOIN possible_answer pa2 ON ua2.answer_id = pa2.id AND pa2.question_id = 2
GROUP BY u.id;
Je recevais des résultats tels que:
username pa1.text pa2.text
user1 yes NULL
user2 no NULL
user3 NULL blue
Quand je sais qu'il ya des entrées pour les deux questions pour l'utilisateur donné.
je l'group by
là-dedans parce que quand je n'avais pas group by
je recevais des résultats comme celui-ci (ce qui est sorta plus proche du résultat escompté) mais ils n'apparaissaient pas montrer tout type de modèle:
username pa1.text pa2.text
user1 yes NULL
user1 NULL red
user2 no NULL
user2 NULL NULL
user3 no NULL
user3 NULL blue
Toutes les pensées seraient très appréciées.
* Des idées? * Vous obtenez ce que vous avez demandé. user1 a répondu "YES" à la question 1. User1 n'a pas répondu à la question 2, NULL est donc affiché car PA2.text est "No" mais UA2.answer_ID est nul pour ce texte. Ainsi vous obtenez NULL. Donc, si vous êtes après une liste de toutes les questions, leurs réponses possibles et quelle réponse fournie par chaque utilisateur. vous devez commencer avec des questions, gauche rejoindre des réponses possibles, puis gauche rejoindre les réponses des utilisateurs. Les jointures droites fonctionneraient dans cet endroit pour mais vous devez déterminer le bon ordre. Pour réellement fournir une réponse, j'ai besoin de savoir quelle sortie vous voulez. – xQbert
À quoi sert le «groupe par»? – Matthew
@xQbert le problème est que ces valeurs ne sont pas réellement nulles. User1 a une réponse à la question2. Les valeurs NULL doivent afficher des valeurs car chacun de ces utilisateurs, dans cet exemple, a répondu aux deux questions. (bien que les fausses données que je montre ne reflètent pas vraiment cela) – Chris