プロが教える店舗&オフィスのセキュリティ対策術

現在PHP+CSVで簡易検索を作りましたが
この度それをMYSQLで実現させようかと考えていますが
以前のような単純なCSV検索と同様の事が
MYSQLのwhere句の部分で表現できなく困っています。

■data.csv
鈴木一郎,野球選手,東京都新宿区
鈴木次郎,サッカー選手,東京都新宿区

検索方法(andで絞込み)
キーワードを何も入れなければ全件出力。

たとえば検索キーとして
「鈴木」 「野球」と入れれば1行目が表示されるイメージです。

■PHP+CSV

$ArrKeyword=explode(" ",$KeyWord);


$Data=file("data.csv");


for ($i = 0; $i < sizeof($Data); $i++) {
for ($n = 0, $flag = 1; $n < sizeof($ArrKeyword); $n++) {
if (!mb_eregi($ArrKeyword[$n], $Data[$i])){
$flag = 0;
break;
}
}

if ($flag) {
$kensaku_kekka[] = $Data[$i];
}
}

■MYSQL

$ArrKeyword=explode(" ",$KeyWord);

$where = " WHERE concat(name,com,jyusho) Like '%$ArrKeyword[0]%' ";

if($ArrKeyword[1]){
for($i = 1; $i < sizeof($ArrKeyword); $i++) {
$where .= "AND (concat(name,com,jyusho) like '%$ArrKeyword[i]%' )";
}
}

$sql = "SELECT * FROM `keigyou_tbl` $where";


//select文を実行
if(!$res=mysql_query("$sql")){

echo "sql失敗";
exit;
}

■MYSQL版の場合2個目のキーワードが機能していません。

A 回答 (1件)

>2個目のキーワードが機能していません。



「鈴木」や「野球」は、$ArrKeywordに、どのように入るのですか?

like '%鈴木%野球%'のように、キーワードとキーワードの間にも、%が入っていますか?

それと、このSQLですが、、、

WHERE concat(name,com,jyusho) Like '%$ArrKeyword[0]%'

concatなどで列を連結すると、インデクスを付けていても有効利用されないはずです。likeの中間一致も、同様に、インデクスを有効利用できません。
しかも、キーワードが多いと、andでつなぐのですか?

こういうSQLは、「性能はどうでもいい。動けばいい」という部類に入るのですが、そういうものを作りたいのでしょうか?

データが1万件以下程度で、遊びや趣味で使うのならいいですが、そうでないならDB設計を見直した方がいいでしょう。
    • good
    • 0
この回答へのお礼

お忙しい中ご返信を下さり本当にありがとうございます。

実は今回がはじめてのMYSQLで、今まで趣味で使っていた検索システムをMYSQLで実現させたく検討していました。

chukenkenkou様のご指摘の通り「'%鈴木%野球%'」とすることで実現できました。

非常に参考になるご意見ありがとうございました。

お礼日時:2006/08/08 14:38

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