複数フィールドの全文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);

コメントを残す