2009-05-31 10 views
3

だから私は自分のすべてのブログ投稿のIDと、そのブログ投稿に関連するコメントの数を選択したいとします。返されるリストがコメント数の順になるようにGROUP BYまたはORDER BYを使うにはどうすればいいですか?投稿ごとに?SQL結合とカウントはGROUP BYで正しくできませんか?

データを返すが、私が望む順序ではないこのクエリがありますか?作ることで何の違いグループを変更しない:

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; 

答えて

4

を私は前SQL92の構文に慣れていないので、私は、私は精通していた方法でそれを表現されます:

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 

どのデータベースエンジンを使用していますか? SQL Serverでは、少なくとも、投稿テーブルからさらにデータを取り出さない限り、結合の必要はありません。参加すると:

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

これは実際に私が遊ぶのにもっとも簡単な例でした私の頭の周りに参加+カウント(それはMySQLの5.xの) –

+0

を理解しています。ジョインで私の答えを広げました。 –

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

選択p.IDを、wp_posts PからCCOUNT AS(c.comment_ID)をカウントし、wp_commentsのC p.ID = c.comment_post_ID GROUP BY C .comment_ID ORDER BY ccount DESC; ^^ちょうどすべてのカウントが1として返されます(それらは必ずしも1ではありません)。 –

+0

私がp.IDでグループ化したときに機能しました。 –

0

おそらくコメントテーブルには、関連するデータが存在しないので、郵便番号によってそれをグループ化してみてください、と学び下さい文を登録しよう、それは非常に有用であると生成し、より良い結果

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 

私も自分のSQLクエリの旅状況のようなものに遭遇しました:)