- ベストアンサー
各カテゴリの件数の計算方法について
お世話になります。 よく他のサイトなどで見かけるカテゴリ分けの際にそのカテゴリに属する件数を表示する際、下記のどような方法が賢いのでしょうか? 【例】 登録されている不動産データ(1万件前後とします)を県別でカテゴリ表示 ・東京都(1,234) ・神奈川県(987) というように表示をしたい。 【方法1:】 データを追加・変更をする時点で、変更前のカテゴリの個数から-1、変更後のカテゴリの個数に+1をしてUPDATEで変更する 【方法2:】 定期的にcronでカウントするプログラムを走らせる ⇒ただこの方法だと実際の件数とCronが走るまでの間に個数に差が発生してしまう問題がでてしまう。 【方法3:】 ページを読み込む際に、count(*)で数える 【方法1】で作っていましたあ2つのカテゴリにまたがる場合(東京都、神奈川県両方)もあり、このとき【方法1】での処理が難しく質問をさせて頂きました。 上記以外にも何か良いカテゴリ件数の表示方法がありましたらアドバイス頂けますと幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 都道府県47つの場合、各都道府県ごとにcountする形になりますでしょうか? GROUP BY 句を使えば一度の実行で、データが存在する全ての都道府県のカウントが取得できますよ。 例) SELECT no, COUNT(*) FROM Table GROUP BY no ORDER BY no; http://www.atmarkit.co.jp/ait/articles/0012/22/news002.html http://dev.mysql.com/doc/refman/5.1/ja/group-by-functions.html なお、パフォーマンスの問題は本番もしくはそれに順ずる環境で実際に測定してみないとハッキリしたことは分からないかと。
その他の回答 (1)
- root139
- ベストアンサー率60% (488/809)
1件当りのデータ量やマシンスペックなどにもよりますが、1万件程度でしたら、方法3の毎回count(*)で値を取る方法で十分だと思いますよ。 都道府県のコード?が格納されているカラムにインデックスが貼ってあれば、余程の低スペックなマシンで無い限り、問題ないスピードで動くでしょう。
お礼
早速のご回答ありがとうございます。 さくらVPSを使っており処理的には問題なさそうです。 新たな質問となってしまいますが、都道府県47つの場合、各都道府県ごとにcountする形になりますでしょうか? 例) Select count(*) from Table where no=1 (no=1~47までforで回す) となるとページ読み込み毎にSQLがあ47回実行されてしまいますがパフォーマンスにさほど問題はないでしょうか?