itoigawaのブログ
2014-08-22
全文検索がどんなものか試してみた。しかし思うように検索されない
SELECT * FROM `blog` WHERE MATCH (title,contents) AGAINST ('word' IN BOOLEAN MODE) ORDER BY `date` DESC
LIKE '%word%' で検索したほうが良い。
$wsql = "";
if($searchtxt){
$count = 1;
$searchtxt = trim($searchtxt); //前後のスペースを取り除く
$searchtxt = str_replace(" "," ",$searchtxt); //全角スペースがあれば、半角スペースに変換
if(stristr($searchtxt, " ")){ //もし半角スペースが間にあれば検索文字列を分解する
$word = explode(" ", $searchtxt);
$count = count($word); //配列の数をカウントしておく
}else{
$word[0]=$searchtxt;
}
//空スペースで区切られた数によってSQL文を組み立てる
for($i = 0; $i<$count; $i++){ //配列の数だけ繰り返す
if($i!="0"){
$wsql = $wsql." OR";
}
$wsql = $wsql." title LIKE '%{$word[$i]}%' or contents LIKE '%{$word[$i]}%'";
}
}
$sql = "SELECT * FROM `blog` WHERE {$wsql} ORDER BY `date` DESC";