J'ai trois tables: stories
, story_types
et comments
requête MySQL avec LEFT OUTER JOIN et OÙ
La requête suivante récupère tous les enregistrements de la table stories
, obtient leur story_types
, et le nombre de commentaires associés à chaque histoire:
SELECT s.id AS id,
s.story_date AS datetime,
s.story_content AS content,
t.story_type_label AS type_label,
t.story_type_slug AS type_slug,
COUNT(c.id) AS comment_count
FROM stories AS s
LEFT OUTER JOIN story_types AS t ON s.story_type_id = t.id
LEFT OUTER JOIN comments AS c ON s.id = c.story_id
GROUP BY s.id;
maintenant ce que je veux faire est de récupérer seulement un enregistrement de stories WHERE s.id = 1
(c'est la clé primaire). J'ai essayé ce qui suit, mais il retourne toujours tous les enregistrements:
SELECT s.id AS id,
s.story_date AS datetime,
s.story_content AS content,
t.story_type_label AS type_label,
t.story_type_slug AS type_slug,
COUNT(c.id) AS comment_count
FROM stories AS s
LEFT OUTER JOIN story_types AS t ON s.story_type_id = t.id
AND s.id = 1
LEFT OUTER JOIN comments AS c ON s.id = c.story_id
GROUP BY s.id;
J'ai également essayé une clause WHERE
à la fin, ce qui jette une erreur. Est-ce que quelqu'un peut indiquer la syntaxe correcte pour une condition comme celle-ci dans cette situation? Je utilise MySQL 5.1.47. Merci.
Vous * avez * mis la clause WHERE avant le GROUP BY, n'est-ce pas? – Tomalak
Vous ne manquez pas une clause GROUP BY? – dcp
De votre titre, il n'y a pas LEFT INNER JOIN; LEFT JOIN et LEFT OUTER JOIN sont la même chose. – GalacticCowboy