J'ai une table qui stocke les messages. Chaque post-objet a un postTypeId qui indique s'il s'agit d'un post de question ou d'un post de réponse. Je voudrais recevoir des questions et compter le nombre de réponses à chaque question. Puis-je le faire en utilisant un JOIN au lieu d'une sous-requête comme indiqué ci-dessous? Le schéma suppose: postsTable(id, postTypeId, parentId, title)
Puis-je utiliser JOIN au lieu d'une sous-requête pour obtenir COUNT() à travers les tables dans MySQL?
SELECT
posts.id, posts.postTypeId, posts.parentId, posts.title
, (SELECT COUNT(answers.id) AS answerCount FROM posts AS answers WHERE posts.id = answers.parentId GROUP BY posts.postTypeId)
FROM posts
WHERE posts.postTypeId = '1'
également, est le groupe nécessaire par la sous-requête?
Merci Conrad, c'est génial! Y a-t-il des avantages/désavantages relatifs à chaque approche? – Mohamad
Conrad, encore une fois, c'est fantastique. Une dernière chose: Supposons que vous vouliez rejoindre les votes sur cette requête, vous ajouteriez une jointure supplémentaire en tant que telle: left join votes sur p.id = votes.postid; J'ai juste essayé, mais les sommes sont toutes incorrectes! Il semble que le nombre de «votes» compte les votes pour le poste parent et celui pour les enfants ... est-ce logique? – Mohamad
Ce que je voulais dire, c'est que l'ajout d'un COUNT supplémentaire (votes.id) chamboule le compte original. Je pense que la requête compte votes.id pour chaque itération de count (answers.id) ... J'espère que cela a du sens! – Mohamad