お世話になります。
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件になると思うんですが、こんなふうにしていいものか悩んでいます。
エラーはエラーで表示させたいんですが・・・。

そもそも、考え方自体が間違えてるのか、それとも他の方法があるのか・・・

全く想像できない状態です。
どうか、アドバイスよろしくお願いします。

A 回答 (2件)

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)

この回答への補足

ご回答いただきありがとうございます!
まず・・・マスターテーブル、というのがよくわかりませんので、
いったんマスターテーブルを作りにいってきます。
そして、教えていただいた方法でやってみます!
また結果をご報告させていただきます。

補足日時:2011/04/12 16:25
    • good
    • 0

>SQLのエラーが帰ってきてしまいます。



あれ?エラーがかえってきます?
msql_num_rows()などで戻り行数をチェックする方がよいのでは?

参考URL:http://www.php.net/manual/ja/function.msql-num-r …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
msql_num_rows()の前の、mysql_query の部分で、クエリー失敗のエラーになります。mysql_num_rowsでもやってみましたが、同様の結果でした。
集計するための行そのものがないので、どうしてもそうなってしまうんですかね??

みなさん一般的にはどのようにされてるのか知りたいです。
○○市(0件)  ○○市(50件) ○○市(9件)
のようにしたいのですが・・・。

お礼日時:2011/04/12 13:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング