- 締切済み
MySQLのcountを使って件数を表示したい
お世話になります。 MySQL・PHPで検索のプログラムを作成しています。 検索結果の件数についてわからないところがあって質問させていただきました。 どうぞよろしくお願いします。 place・・・エリア 1,2,3,4,5,6・・・と番号が入っています。 1番が大阪、2番が東京・・・のような感じで割り振っています。 欲しい結果は、 大阪(100件) 東京(6524件)・・ ・のような形で、countした値をカッコ内に件数として表示させたいと思っております。 SELECT place,count(*) FROM test_tbl where place IN (1,2,3) GROUP BY place WITH ROLLUP; if(!($rs = mysql_query($query))) { print $query; print "クエリー失敗"; } このような感じで地域をグループ化して件数を表示させたいのですが、 1のエリアも2のエリアも3のエリアも該当するデータがない場合、「0件」という結果が欲しいのですが、 SQLのエラーが帰ってきてしまいます。 「失敗」の部分に「0」を入れれば0件になると思うんですが、こんなふうにしていいものか悩んでいます。 エラーはエラーで表示させたいんですが・・・。 そもそも、考え方自体が間違えてるのか、それとも他の方法があるのか・・・ 全く想像できない状態です。 どうか、アドバイスよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- takubou05
- ベストアンサー率52% (11/21)
placeをマスターテーブルで定義していますか? もし、しているのであれば、 集計クエリをサブクエリにし、 マスターテーブルと外部結合、 でどうにかなると思いますよ。 マスターテーブル を master_tbl 都道府県を master_tbl.value place を master_tbl.id と仮定しています。 select a.value , ifnull(place_count, 0) from master_tbl as a LEFT JOIN ( SELECT place , count(place) as place_count FROM test_tbl group by place ) as b on a.id = b.place where a.id IN (1,2,3)
- yambejp
- ベストアンサー率51% (3827/7415)
>SQLのエラーが帰ってきてしまいます。 あれ?エラーがかえってきます? msql_num_rows()などで戻り行数をチェックする方がよいのでは?
お礼
ご回答ありがとうございます! msql_num_rows()の前の、mysql_query の部分で、クエリー失敗のエラーになります。mysql_num_rowsでもやってみましたが、同様の結果でした。 集計するための行そのものがないので、どうしてもそうなってしまうんですかね?? みなさん一般的にはどのようにされてるのか知りたいです。 ○○市(0件) ○○市(50件) ○○市(9件) のようにしたいのですが・・・。
補足
ご回答いただきありがとうございます! まず・・・マスターテーブル、というのがよくわかりませんので、 いったんマスターテーブルを作りにいってきます。 そして、教えていただいた方法でやってみます! また結果をご報告させていただきます。