2009-05-31 9 views
3

Sagen wir also, ich möchte die ID aller meiner Blogposts und dann die Anzahl der mit diesem Blogpost verknüpften Kommentare auswählen. Wie verwende ich GROUP BY oder ORDER BY, damit die zurückgegebene Liste in der Reihenfolge der Anzahl der Kommentare angezeigt wird per Post?SQL Join und Count kann GROUP BY nicht richtig?

Ich habe diese Abfrage, die die Daten zurückgibt, aber nicht in der Reihenfolge, die ich will? Ändern der Gruppe macht keinen Unterschied:

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; 

Antwort

4

Ich bin nicht vertraut mit Pre-SQL-92-Syntax, also werde ich es in einer Weise auszudrücken, die ich kenne:

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 

Welche Datenbank-Engine verwenden Sie? Zumindest in SQL Server ist kein Join erforderlich, es sei denn, Sie ziehen mehr Daten aus der posts-Tabelle. Mit einem beitreten:

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

Das war wirklich nur das einfachste Beispiel für mich zu spielen mit zu bekommen mein Kopf herum beitreten + zählen (es ist mysql 5.x) –

+0

Verstanden. Meine Antwort wurde mit einem Join erweitert. –

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

wählen p.ID, count (c.comment_ID) AS ccount von wp_posts p, wp_comments c wo p.ID = c.comment_post_ID GROUP BY c .comment_ID ORDER BY ccount DESC; ^^ gibt nur alle zählt als 1 (sie sind definitiv nicht alle 1) .. –

+0

Oh es funktionierte, wenn ich Gruppe von p.ID .. –

0

wahrscheinlich gibt es keine entsprechenden Daten auf der Kommentare Tabelle, so versuchen Sie es bitte durch die Post-ID Gruppierung, und bitte lernen JOIN-Anweisungen, ist es sehr hilfreich ist und bessere Ergebnisse

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 

begegnete ich auch diese Art von Situation in meinen SQL-Abfrage Reisen :)