2009-05-31 6 views
3

Alors disons que je veux sélectionner l'ID de tous mes articles de blog, puis le nombre de commentaires associés à ce blog, comment utiliser GROUP BY ou ORDER BY pour que la liste renvoyée soit dans l'ordre du nombre de commentaires par la poste?SQL Join et Count ne peuvent pas GROUP BY correctement?

J'ai cette requête qui renvoie les données mais pas dans l'ordre que je veux? Modification du groupe en fait aucune différence:

SELECT p.ID, count(c.comment_ID) 
FROM wp_posts p, wp_comments c 
WHERE p.ID = c.comment_post_ID 
GROUP BY c.comment_post_ID; 

Répondre

4

Je ne suis pas familier avec la syntaxe pré-SQL92, donc je vais l'exprimer d'une manière que je connais:

SELECT c.comment_post_ID, COUNT(c.comment_ID) 
FROM wp_comments c 
GROUP BY c.comment_post_ID 
ORDER BY COUNT(c.comment_ID) -- ASC or DESC 

Quel moteur de base de données utilisez-vous? Dans SQL Server, au moins, vous n'avez pas besoin d'une jointure sauf si vous extrayez plus de données de la table Posts. Avec un join:

SELECT p.ID, COUNT(c.comment_ID) 
FROM wp_posts p 
JOIN wp_comments c ON c.comment_post_ID = p.ID 
GROUP BY p.ID 
ORDER BY COUNT(c.comment_ID) 
+0

C'était vraiment juste l'exemple le plus facile pour moi de jouer avec pour obtenir ma tête autour de rejoindre + compte (c'est mysql 5.x) –

+0

Compris. Élargi ma réponse avec une jointure. –

3
SELECT p.ID, count(c.comment_ID) AS [count] 
FROM wp_posts p, wp_comments c 
WHERE p.ID = c.comment_post_ID 
GROUP BY c.comment_post_ID; 
ORDER BY [count] DESC 
+0

select p.ID, compter (c.comment_ID) AS ompte de wp_posts p, c wp_comments où p.ID = c.comment_post_ID GROUP BY c .comment_ID COMMANDER PAR le compte DESC; ^^ renvoie juste tous les comptes comme 1 (ils ne sont certainement pas tous 1) .. –

+0

Oh cela a fonctionné quand j'ai fait le groupe par p.ID .. –

0

probablement il n'y a pas de données connexes sur la table des commentaires, donc s'il vous plaît essayer groupant par l'ID de poste, et s'il vous plaît apprendre REJOIGNEZ déclarations, il est très utile et produit de meilleurs résultats

SELECT p.ID, count(c.comment_ID) 
FROM wp_posts p 
LEFT JOIN wp_comments c ON (p.ID = c.comment_post_ID) 
GROUP BY p.ID 

J'ai aussi rencontré ce genre de situation dans mes voyages de requête SQL :)