電子書籍の厳選無料作品が豊富!

東京都
足立区(~件) 北区(~件) 墨田区(~件)……… 

神奈川県
横浜市(~件) 川崎市(~件)………… 


上記のような形で、データベースからデータを取得して、エリアの横に件数を表示させる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}件);
}

A 回答 (1件)

RDBで管理していてなぜCOUNTで件数を拾わないのでしょうか?


それとSELECT *などワイルドカードを使うとバグの所在がわからなくなるので
運用にあたってはかならず具体的なフィールド名を列記してください

テーブルの構造がよくわかりませんが、こんな感じでしょうか?
(適切なインデックスが貼ってあれば高速に処理できるはずです)

SELECT area,t1.市区町村,count(*) as 件数
FROM 全物件のデータ AS t1
INNER JOIN エリアのテーブル as t2
ON t1.市区町村=t2.市区町村
GROUP BY area,t1.市区町村
    • good
    • 0
この回答へのお礼

勉強不足でCOUNTの使い方を知りませんでした。
教えていただいたようにソースを変更しましたら一瞬で表示されるようになりました。

ありがとうございます!

お礼日時:2011/04/23 09:30

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