プロが教えるわが家の防犯対策術!

プログラマーではないのですが、php+mysqlを使って特定のテーブルから特定のキーワードを抜き出して件数を表示したいと思います。

美容室(10)理容室(7)エステ(5)ネイル(3)
のように表示させたく、下記のように書きました。

$wo1="美容室";
$wo2="理容室 ";
$wo3="エステ";
$wo4="ネイル";


$dbh = new PDO($dsn, $username, $password);
$dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

$sql = "SELECT * FROM テーブル WHERE 種別 like BINARY'%$wo1%'";
$stmt = $dbh->query($sql);
$stmt->execute();
$count=$stmt->rowCount();

$sql2 = "SELECT * FROM テーブル WHERE 種別 like BINARY'%$wo2%'";
$stmt2 = $dbh->query($sql2);
$stmt2->execute();
$count2=$stmt2->rowCount();

$sql3 = "SELECT * FROM テーブル WHERE 種別 like BINARY'%$wo3%'";
$stmt3 = $dbh->query($sql3);
$stmt3->execute();
$count3=$stmt3->rowCount();

$sql4 = "SELECT * FROM テーブル WHERE 種別 like BINARY'%$wo4%'";
$stmt4 = $dbh->query($sql4);
$stmt4->execute();
$count4=$stmt4->rowCount();




<?php print($wo1); ?>(<?php print($count); ?>)
<?php print($wo2); ?>(<?php print($count2); ?>)
<?php print($wo3); ?>(<?php print($count3); ?>)
<?php print($wo4); ?>(<?php print($count4); ?>)


実際に動いているのですが、
他に都道府県別に
北海道(3)東京都(5)とやりたいので47回SQLを発行するのが大変なので
もっと軽くなる方法はありますでしょうか?

A 回答 (3件)

都道府県テーブルつくってjoinしながらcountすればいいのでは?

    • good
    • 0
この回答へのお礼

ありがとうござます。まだまだわからないので、そのままやってみます

お礼日時:2015/03/19 02:40

データがちゃんと正規化されているのであれば,ANo.1さんの書かれている通り,GROUP BYすればよいでしょう。


ただ,例示されているような,種別はLIKEで取ってこないといけないような作りであるならば,都道府県でも同じように一個ずつ取ってくる必要があるかもしれません。
RDBをRDBらしく使うならば,データの正規化は必須です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
調べてみます。

お礼日時:2015/03/19 02:39

バインド変数使え。


count()関数使え。
後、group by句を使えば一回のSQLで完結するな。
    • good
    • 0
この回答へのお礼

ありがとうございます。
調べてみます。

お礼日時:2015/03/19 02:39

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