
現在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個目のキーワードが機能していません。
No.1ベストアンサー
- 回答日時:
>2個目のキーワードが機能していません。
「鈴木」や「野球」は、$ArrKeywordに、どのように入るのですか?
like '%鈴木%野球%'のように、キーワードとキーワードの間にも、%が入っていますか?
それと、このSQLですが、、、
WHERE concat(name,com,jyusho) Like '%$ArrKeyword[0]%'
concatなどで列を連結すると、インデクスを付けていても有効利用されないはずです。likeの中間一致も、同様に、インデクスを有効利用できません。
しかも、キーワードが多いと、andでつなぐのですか?
こういうSQLは、「性能はどうでもいい。動けばいい」という部類に入るのですが、そういうものを作りたいのでしょうか?
データが1万件以下程度で、遊びや趣味で使うのならいいですが、そうでないならDB設計を見直した方がいいでしょう。
お忙しい中ご返信を下さり本当にありがとうございます。
実は今回がはじめてのMYSQLで、今まで趣味で使っていた検索システムをMYSQLで実現させたく検討していました。
chukenkenkou様のご指摘の通り「'%鈴木%野球%'」とすることで実現できました。
非常に参考になるご意見ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数カラムに対するLIKE文の最適化
-
INDIRECT関数の代替方法は?
-
DBの定義のサイズを大きくし過...
-
構造が異なる二つのテーブルをu...
-
カラムとコラムの使い分け
-
他のシートの検索
-
UNIONする際、片方テーブルしか...
-
インデックスについて
-
type date にnullをinsert
-
ホームページを作ろうと思いま...
-
AUTO_INCREMENTに0はダメ?
-
Accessで複数(3以上)...
-
GREATESTで NULLをスルーする方...
-
now()かCURRENT_TIMESTAMPか
-
テーブルの列数を調べたい
-
ROUND関数で、四捨五入ができな...
-
BULK INSERT時のNull許容について
-
ドロップダウンリストの連動し...
-
MySQL(5.5)1テーブル内のカラ...
-
【SQL】select に ワイルドカー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LIKEの右側にカラムを指定でき...
-
mysqlで50音順にorder byしたい。
-
End Ifに対応するIfブロックが...
-
スペースによる絞り込み検索をS...
-
複数キーワードを複数カラムに...
-
WHERE `年月日` = '晴' OR `年...
-
場合の数 中学入試 5枚のカード
-
whereで全てを検索する方法
-
複数条件による検索
-
LIKE演算子の%について教えて...
-
複数カラムに対するLIKE文の最適化
-
MySQLのあいまい検索について
-
4つのセルの文字列が全て一致...
-
Accessで文字列の一部を抽出す...
-
SQLで条件の文字列を含んでいる...
-
PL/SQLでの文字列比較
-
SQLステータス:37000について
-
社名でデータ抽出できる検索シ...
-
前と後という言葉の意味
-
Access & ADOで「'」のLIKE検索
おすすめ情報