2012-03-13 13 views
1

私はサイトマップを作っています。私はポストをカテゴリ(2列:categoryId、postId)につなげるテーブルを持っています。合計で約9000のカテゴリがあり、ページ作成のページ数を予測するために各カテゴリの投稿の数をカウントしたいと思います。私は9000カウント(*)を各カテゴリにしようとしたが、それは遅すぎる(実際には2時間)。私に何ができる?ありがとう。MySQL。 〜9000カテゴリの投稿の数をカウントする必要があります

+0

私は指定されたIDを持つカテゴリの投稿数を取得したいと思います。申し訳ありませんが、この重要な部分を追加するのを忘れました。 – user1267570

答えて

1

あなたはちょうどこのようなあなたの区分によりSELECT COUNTとGROUPそれをしなければならない。

SELECT C, COUNT(*) FROM yourtable GROUP BY categoryId as C 

あなたが特定のカテゴリのみたい場合は、GROUP BY

+0

私は実際に特定のカテゴリの投稿を数多く取りたいと思っています。しかし、はい、このクエリはいいですし、それは本当に速く動作します。 – user1267570

+0

この間違いを変更しました、Senadに感謝します。 – ChapMic

+0

このクエリはcategoryIdなしで機能しました。しかし、categoryIdなしでは、実際には役に立たない。 – user1267570

2

WHERE categoryID = ?
を使用するようにしてくださいGROUP BY関数を使用する

SELECT C, COUNT(*) 
FROM TABLE 
GROUP BY categoryId as C 
+0

あなたはおそらく 'as'がありません:' GROUP BY categoryId ** ** C ** ' – TMS

+0

私は実際には特定のカテゴリの投稿を数多く取りたいと思っています。 – user1267570

0

あなたはそれを数えてCategoryIDで簡単にグループ化できます

select Count(postid) as NumberOfPosts, categoryid from your_table group by categoryid 

であり、そのように単純です。

あなたが本当の統計量を保持し、投稿が作成されたときに増加させるか、投稿が削除されるときに減少させる表を作成するのが最適なソリューションです。あなたが特定のカテゴリにしたい場合は

NEW は、ちょうどので、あなたのクエリが

select Count(postid) as NumberOfPosts from your_table where categoryid=? 

または複数のカテゴリの検索を行いたい場合のようになります。どこcategoryid=?

照会に追加しますただこれを行うよりも

select Count(postid) as NumberOfPosts, categoryid from your_table where categoryid in (1,2,3,4) 
group by categoryid 
+0

私は実際に特定のカテゴリの投稿を数多く取りたいと思っています。 – user1267570

+0

"ベスト・ソリューション"は私にとっては最適ではありません。私は自分のDBにs ** tを入れたくない。 – user1267570

+0

私の回答を更新しました –

関連する問題