• ベストアンサー

各カテゴリの件数の計算方法について

お世話になります。 よく他のサイトなどで見かけるカテゴリ分けの際にそのカテゴリに属する件数を表示する際、下記のどような方法が賢いのでしょうか? 【例】 登録されている不動産データ(1万件前後とします)を県別でカテゴリ表示 ・東京都(1,234) ・神奈川県(987) というように表示をしたい。 【方法1:】 データを追加・変更をする時点で、変更前のカテゴリの個数から-1、変更後のカテゴリの個数に+1をしてUPDATEで変更する 【方法2:】 定期的にcronでカウントするプログラムを走らせる ⇒ただこの方法だと実際の件数とCronが走るまでの間に個数に差が発生してしまう問題がでてしまう。 【方法3:】 ページを読み込む際に、count(*)で数える 【方法1】で作っていましたあ2つのカテゴリにまたがる場合(東京都、神奈川県両方)もあり、このとき【方法1】での処理が難しく質問をさせて頂きました。 上記以外にも何か良いカテゴリ件数の表示方法がありましたらアドバイス頂けますと幸いです。

  • MySQL
  • 回答数2
  • ありがとう数14

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.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)
回答No.1

1件当りのデータ量やマシンスペックなどにもよりますが、1万件程度でしたら、方法3の毎回count(*)で値を取る方法で十分だと思いますよ。 都道府県のコード?が格納されているカラムにインデックスが貼ってあれば、余程の低スペックなマシンで無い限り、問題ないスピードで動くでしょう。

news_0203
質問者

お礼

早速のご回答ありがとうございます。 さくらVPSを使っており処理的には問題なさそうです。 新たな質問となってしまいますが、都道府県47つの場合、各都道府県ごとにcountする形になりますでしょうか? 例) Select count(*) from Table where no=1 (no=1~47までforで回す) となるとページ読み込み毎にSQLがあ47回実行されてしまいますがパフォーマンスにさほど問題はないでしょうか?

関連するQ&A

  • 市区町村の表示と件数

    東京都 足立区(~件) 北区(~件) 墨田区(~件)………  神奈川県 横浜市(~件) 川崎市(~件)…………  上記のような形で、データベースからデータを取得して、エリアの横に件数を表示させるPHPを作成したのですが表示速度が遅すぎて困っています。ソースは以下です。1番目のテーブルで、指定した都道府県の市区町村データを取得してから、2番目のテーブルでそれに合致する物件データの件数を取得するというものです。表示速度を改善する方法はありますでしょうか? //ソース $sql_area = "SELECT * FROM エリアのテーブル WHERE area = '東京都'"; $result_area = mysql_query($sql_area); for($i = 0; $i < mysql_num_rows($result_area); $i++){ $arr_area = mysql_fetch_array($result_area); $sql_cnt = "SELECT * FROM 全物件のデータ WHERE 市区町村 = {$arr_area[市区町村]}; $result_cnt  = mysql_query($sql_cnt); $category_cnt = mysql_num_rows($result_cnt); echo $arr_area[区名]({$category_cnt}件); }

    • ベストアンサー
    • PHP
  • Movable Type でのサイト内検索でカテゴリーをプルダウンの絞り込み検索にしたい。

    お世話になります。 Movable Typeでサイトを作っているのですが、 記事が膨大にあるので、プルダウンでの絞り込み検索のページを作ろうと思ってます。 「カテゴリーのプルダウン」を選ぶと そのカテゴリーに属している 「小カテゴリーのプルダウン」が表示 さらに小カテゴリーを選ぶと、 そこに属されている記事が表示される。 という具合です。 まさに、この「教えてgoo」で、 質問を投稿する際に、 投稿カテゴリーを選ぶときのプルダウンのような感じです。 -----具体的な参考として-------------- http://www.denko-do.com/blog/movable-type/post_192.html こちらの絞り込を最初に参考にさせていただいたのですが、 神奈川県でも、大田区(本当は東京都)が出てくるので、 神奈川県を選んだら神奈川県の区しか出てこない感じで絞り込み検索ができればいいのにと思って居ます。

  • カテゴリ毎の記事件数表示

    PHPとMySQLを使用しています。 ブログなどで、カテゴリ毎にそのカテゴリに登録されている記事件数がカテゴリ横に表示されているケースがあります。 (「カテゴリ名(15)」←のようなものです) それと同じことをしたいのですが、 ―――――――――― $sql = "SELECT COUNT(cateid) AS cnt FROM prod GROUP BY cateid order by cnt"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); $numrow = mysql_fetch_array($res, MYSQL_ASSOC);   while($numrow){   echo $numrow["cnt"];   } カテゴリid毎にレコード数をカウントして、それを配列で受けて表示する ―――――――――― という流れのつもりなのですが、上記スクリプトの「while~」部分がない場合は、1つのカテゴリidの登録数のみが表示され、他のカテゴリidは表示されず、「while~」を加えるとPCがフリーズしました。 熟考できていないのですが、何かヒントや上記スクリプトの間違いなどを ご指摘いただけると大変有り難く存じます。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 配列データの件数指定表示

    こんばんは。お世話になっております。 テキストファイルに保存してある配列データがあり、そのデータを呼び出したとき、10件なり20件なりの件数を制限してページング処理?を行いたいのですが、その配列にある各データには、タブ区切りで「OK」または「NO」というデータも格納されており、「NO」というデータのみを件数を制限して表示させたいと考えてます。(次ページなり前ページなりでページを変えて表示させたい) //$count テキストファイルに格納された配列のデータ数 //$string 配列データ $lim = 10;//件数制限 $ii=1; for($i=0; $i<$count; $i++){ $category_data = $string[$i]; $category_data = explode(' ',$category_data); if(trim($category_data[5]) == "no"){ $ii++; echo "○○\n";//ここにデータを表示 if($ii > $lim){break;} } } 以上が、実際にローカル上で記述しているスクリプトなのですが、先の説明のように、はじめの10件までは表示させることが出来ましたが、次ページに移動した際、11件目からのデータを取得する方法が思いつくことが出来ず、今日も朝からテストを繰り返している状況です。 このような場合、どのようにしたら宜しいのでしょうか? お忙しい中恐縮ですが、アドバイスなど頂戴できれば幸いです。 ※以下の質問も投函しており、解決済みとしておりませんが、今回の質問の延長線上にあるので、「解決済みになっていない」ことをお気づきの場合、ご了承願えればと思います。 http://oshiete1.goo.ne.jp/qa4281205.html

    • ベストアンサー
    • PHP
  • データの件数を取得したいです。

    ACCESSを使って、アドレス帳を作成しています。 指定した条件と一致するデータ件数を求めてMsgboxに表示させようと思い次のようにPGしました。 strSQL = "" strSQL = SELECT COUNT(*) FROM アドレス長 WHERE グループ = 'Screen.ActiveForm.グループ.Value ' MsgBox Count これだと、MsgBoxには何も表示されません。 どのように変更すればいいでしょうか?

  • Excel でのアンケート集計方法

    エクセルでアンケートの集計をしています。 神奈川県 愛知県 大阪府 東京都 神奈川県 東京都 愛知県 東京都 ・ ・ ・ ・ ↑のように複数の結果を集計したいのですが、 何県がいくつあるかを調べるにはどのようにすればよいでしょうか? 現在は昇順で並び替えて、 手作業で重複している県を削除しているのですが、 今後データ数が多くなってくると、 とても手作業ではできなくなるので、 良い方法をご存知の方がいらっしゃったらお教えください。

  • データの個数を数える

    データの個数を数えるにはどのようにしたら良いのでしょうか? たとえば、クエリに 県名 東京都 東京都 大阪府 宮城県 北海道 大阪府 千葉県 東京都 とあったとして、 各県名がそれぞれ何件ずつあるか知りたいのですが、方法がさっぱりわかりません。すべての都道府県を表示し、さらにデータにない県名は「0件」としたいのです。 たとえば、上の例を使うと 北海道 1 青森県 0 宮城県 1 東京都 3 大阪府 2 :::略::: 沖縄県 0 としたいと考えています。access 2003を使用しています。 ご教授よろしくお願いします。

  • エクセル オートフィルタで件数と割合

    A列に都道府県、B列に市区町村、C列に性別、D列に年齢・・・ でI列までデータが入っている表があります。 オートフィルタを使って、例えば A列で東京都を選び、B列で新宿区を選んだ場合、 東京都の件数に対する新宿区の件数割合が、同じシートのどこかのセルに表示できないでしょうか? データは2000件ほど。SUBTOTAL関数で、全体の件数に対する割合は出せたのですが、任意に選んだ項目に対する割合を出す方法が見つかりません。 データもI列までありますので、最初にオートフィルタで選ぶ列がA列とも限らず、また3列・4列選ぶ事もあります。 EXCEL2000です。簡単な関数なら使った事があります。どうかよろしくお願いします。

  • エクセルのオートフィルタで

    データが ---- 都道府県名 ←オートフィルタの先頭 東京都 神奈川県 神奈川県 東京都 神奈川県 埼玉県 ---- エクセルのオートフィルタで都道府県名を並べ替えで昇順とやると、 ---- 都道府県名 神奈川県 東京都 埼玉県 神奈川県 神奈川県 東京都 ---- となり、きちんと並べ替えがされません…なぜでしょうか? オートフィルタをかけたまま保存し、たまに開いてデータを追加していっています。追加されたデータがきちんと並び変わっていないようなきがするのですが、オートフィルタをかけなおしてもやっぱり並び替えしてくれません… 例えば神奈川県だけをオプションで選択したらきちんと3県選択してくれ、そのうちのひとつの神奈川県をセルで選んで、他の2つにセルごとコピーします。その後、上記の並べ替えをするときれいに並び変わります。 値は同じなのにきれいに並べ替えできないのはなぜでしょうか? 説明がうまくできてないかもしれませんが、宜しくお願いします。

  • EXCEL2007で2列の入力内容を集計するには?

    EXCEL2007で、次のような集計をどうするかわからず、困っています。 たとえば、各入力行に、 ----- 東京都  杉並区 東京都  千代田区 神奈川県 瀬谷区 神奈川県 横浜市 東京都  千代田区 東京都  武蔵野市 東京都  杉並区 神奈川県 横浜市 東京都  千代田区 ----- ...のように、2列にそれぞれ文字列が入っているデータにおいて、2列の語句の組み合わせで一番多いものをカウントアップし、多いもの順に表示させたいのです。 上の例でいえば、 東京都  千代田区 3 東京都  杉並区 2 神奈川県 横浜市 2 東京都  武蔵野市 1 神奈川県 瀬谷区 1 のようにカウントしたものを作りたいのです。 2つの語句を結合してしまってからピボットテーブルを使えばできそう、とまではわかってきたのですが、できれば2列に分かれたまま集計したいです。 お知恵をお貸しください。