• ベストアンサー

複数のテーブルに跨る集計その2

こんにちは。お世話になっております。 http://oshiete1.goo.ne.jp/qa2684315.html 昨日、上記ページより投函させていただきましたが、その時は解決できたものの、その後の新たなソースの追加で上記ページにある、検索結果表示にある、各々の「件数表示」が出来なくなってしまいました。 当初は単に追加したソースが邪魔してる?などという思いから、色々と設定を変えているものの上手く行かず、現在なんとか件数表示を表示する事は出来たものの、繰返処理(while)の中に新たに、 $id = $row['id']; $sql = "select id FROM data WHERE id = '$id'"; $result = mysql_query($sql); $rows = mysql_num_rows($result); echo $rows; なんて、入れることで対処出来ましたが、この対処法に自信がなく、改めて諸先輩方々にヒントだけでもご指導いただければと投函させて頂きました。 お忙しい中恐縮ですが宜しくお願い致します。 ※通常の?検索ソースは上記ページでご教授いただいた select M.id, M.name, count(M.name) as count from data D inner join member M on M.id = D.id group by M.name, M.id order by count desc を参考にさせていただいております。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

全体の行数が知りたいのではないですよね? こんな感じでとりだしてください <?PHP ・・・初期設定略 $sql = <<<eof SELECT M.`id`, M.`name`, COUNT(*) AS `count` FROM `data` AS D INNER JOIN `member` AS M ON M.`id` = D.`id` GROUP BY M.`id` ORDER BY `count` DESC eof; $result = mysql_query($sql); while($rows = mysql_fetch_array($result,MYSQL_ASSOC)){ print $rows['id'].$rows['name'].$rows['count']."件<br>\n"; } ?>

sadacha
質問者

お礼

yambejp様 こんばんは。度重なるアドバイス、有難う御座います。 えっと、私の説明不足お許し下さい。全体の件数は取得済みなのですが、下記(前回から転記)に示したの2つのテーブル(member.data)からの検索結果において、テーブルdataにあるid(memberにあるidと同じid)が何件あるかを、memberのnameと共に表示させたいのです。 前回の有難いご指導によりnameは取得する事が出来ているのですが、その件数までは取得できずにおります。 質問にもありますように、whileの中に、再度selectすることで対処は出来ているのですが、この対処法に自信が持てずにいるのです。 お忙しい中恐縮ですが宜しくお願い致します。 テーブル(member) id id_name name  1 takashi さんま 2 sayuri きゅうり 3 akemi  とまと テーブル(data) id date 2 07-1-20 3 07-1-20 2 07-1-20 1 07-1-21 2 07-1-21 3 07-1-21 以上のようなテーブルがあり、下記のように、テーブルdataのidをカウントし、多いもの順に結果を表示させたいのですが、このような場合のソースが分かりません。 結果 きゅうり 3件 とまと  2件 さんま  1件

sadacha
質問者

補足

yambejp様 すみません!読み違えて誤解していました!汗 各nameの件数を取得するためのソースだったのですね。 先ほどそれに気付き、お陰様をもちまして欲していた表示を得る事が出来ました。 毎度の事ながら、いつもお手数お掛けし申し訳ありません。 有難う御座いました!

その他の回答 (1)

回答No.2

前回の質問も拝見し、回答しようとしたところ、先に同様の回答がされたので回答を控えた者です。 「~できない」といった説明でなく、具体的にどの部分でどういう結果を期待しているのにどういう結果(エラー内容や検索結果)になるかを書いてください。 表名や列名などに英単語を使っていますが、MySQLの関数名と同じであったりと、予約語とぶつかる可能性がありますが、それを分かった上で使用しているのでしょうか? 予約語とぶつからないような表名や列名にするか、「`」(バッククォート)で囲まないと、思わぬ文法エラーになる可能性がありますよ?

sadacha
質問者

お礼

chukenkenkou様 はじめまして、こんばんは。貴重なご意見有難う御座います。 >それを分かった上で使用しているのでしょうか?  質問にある「data」というテーブル名は、実際はもっと長い名前で登録しています。(dataという単語は含まれていますが、分かりやすくするため省略しての提示です。memberは実際と同じです。) >どういう結果を期待しているのにどういう結果(エラー内容や検索結果)になるかを書いてください。 すみません。下記にも記載しましたが、以下のような感じです。 エラーは出ていませんが、テーブルdataのidが何件登録されているかを、name単位で表示させたく思っております。 テーブル(member) id id_name name  1 takashi さんま 2 sayuri きゅうり 3 akemi  とまと テーブル(data) id date 2 07-1-20 3 07-1-20 2 07-1-20 1 07-1-21 2 07-1-21 3 07-1-21 以上のようなテーブルがあり、下記のように、テーブルdataのidをカウントし、多いもの順に結果を表示させたいのですが、このような場合のソースが分かりません。 結果 きゅうり 3件 とまと  2件 さんま  1件

関連するQ&A