複数フィールドの全文and検索をDBへ投げつける
某所で仕方なく作成したデータベース関連のプログラム
バックグラウンドとしてはエクセルベースのデータをDBに移動して全文検索を行いたいというもの。
リレーションもデータ並びもあったもんじゃないユーザ本位のデータの並びを全文検索 & ここは検索したくないという要望を叶えた魔法のやりかた。利用DBはmysql5.1。もっと簡単にうまい方法があれば誰か教えてくださいエロい人。
むしろだまってエクセルで管理しろと愚痴りたい。
正気とは思えない全文検索の方法
・concat_wで全部のフィールドをつなげる
・空白で区切ったキーワードを全てANDで検索する
・まあ、下のやり方を見てくれ。
$keyword = $_GET['search'];
// キーワードの空白を半角へ変換
$keywords = str_replace(" ", " ", $keyword);
// このへんでサニタイズすればいいんだけど面倒くさくてやめた
// 空白毎に配列に収納
$search_arr = preg_split("/[ ]+/",$keywords);
$sql = "select * from cb2ExprtFailure";
$concat = "concat_ws(' ',`id`,`category`,`group`,`system`,`version`,`menu`,`processing`,`event`,
`failure`,`coping`,`workaround`,`breeder`,`provision`,`specialNote`,`accrual`,`fixVersion`,
`createDate`,`postPosition`,`postUser`,`priority`,`categoryFailure`,`developer`,`fixScheduledDate`,
`completScheduledDate`,`finishDev`,`level`,`import`)";
$where = " WHERE 1";
foreach($search_arr as $item){
if($item != ""){
$where .= " AND ".$concat." LIKE '%{$item}%'";
}
}
$std = $dbh->prepare($sql.$where);
$std->execute();
$hoge = $std->fetchAll();
var_dump($hoge);
-
前の記事
jQueryにてチェックボックス・セレクトボックスを選択済み状態にする 2011.02.08
-
次の記事
活動ログ 2011/02/08 2011.02.08