J'essaie de faire une requête plutôt complexe (pour moi, au moins) qui implique l'extraction de lignes qui peuvent avoir des valeurs NULL
. Il y a quatre tables ici, tags
, questions_tags
, users_experience
et answers
. Les connexions sont plutôt simples. Les questions sont étiquetées, les étiquettes ont des noms, les utilisateurs donnent des réponses aux questions et les utilisateurs ont de l'expérience avec des étiquettes particulières. Je veux trouver les réponses que les utilisateurs ont données, et leur expérience (qui peut être NULL
) pour les balises de ces questions. Je commande par le nombre de réponses données pour un tag particulier.MySQL JOINs avec des valeurs NULL
Ma requête est la suivante. Ce n'est pas du tout optimisé (et si vous avez des suggestions d'optimisation, s'il vous plaît suggérer loin!):
SELECT t.tag_id, t.name, ue.body, COUNT(a.qid)
FROM tags AS t
LEFT JOIN users_experience AS ue
ON t.tag_id = ue.tag_id
LEFT JOIN questions_tags AS qt
ON qt.tag_id = t.tag_id
LEFT JOIN answers AS a
ON a.qid = qt.qid
WHERE a.uid=1
GROUP BY t.tag_id
ORDER BY COUNT(a.qid) DESC;
Le problème que je suis face à la requête ci-dessus est que si quelqu'un a noté l'expérience pour une étiquette particulière , cela apparaîtra pour l'utilisateur que ce soit leur expérience ou non. Je ne souhaite voir que l'expérience de cet utilisateur particulier, ce que cette requête ne fait tout simplement pas. J'ai rencontré ce problème ailleurs et j'ai été perplexe, alors j'ai dû le contourner.
J'ai essayé d'ajouter AND ue.uid = 1
à la requête, mais cela limitera les résultats sur seulement ceux où l'expérience a déjà été donnée, et ne renverra pas les valeurs NULL
que je désire, aussi bien.
Des idées sur ce qu'il faut faire?
Génial, merci! –