【SQL】フリーワード検索時に使えるSQL「concat」 複数キーワードphpソース 

mysql

フリーワード検索


Google検索とかでもあるフリーワード検索。
スペース区切りで普通検索しますが、実際に自分で作成したシステム内でのフリーワード検索をする場合、テーブルのどのカラム名を検索対象とするかを
まず決める。
フリーワードなので当然該当カラム名は複数になると思うけど、スペース区切りでの検索データを複数のカラムに実行する方法でSQLの「concat」をはじめて使ってみる。

sample01 sample02 sample03
S- A- Z-
S- K- Z-
G- A- T-
G- K- T-

例えば、上のテーブルを参照するとして、3,4列目の「G-」の行だけ欲しいとします。

SQLのconcat


// もしも文字列が入っていれば。。
 if( strlen( $_GET['keyword'] ) > 0 ){

// 全角スペースを半角スペースに置換
 $keyword_txt = str_replace( " " , " " , $_GET['keyword'] );
// スペース区切りで文字列を配列に分割
 $keywordArr = explode( " " , $keyword_txt );

// SQL文
 $SQL .= " AND (";

// キーワードをスペース区切りで配列にし、検索SQLを作る
 for( $i = 0; $i < count($keywordArr);$i++ ){

$SQL .= "concat(sample01,' ',sample02,' ',sample03) LIKE '%{$keywordArr[$i]}%' AND ";

}

$SQL = rtrim( $SQL , " AND " );
 $SQL .= ")";
 }

こんな感じに作ってみました。

var_dumpすると。。

SELECT * FROM view_sample
WHERE
(
concat(sample01,’ ‘,sample02,’ ‘,sample03) LIKE ‘%G-%’
)
ORDER BY id DESC

こういった感じ。

これでSQLすると

sample01 sample02 sample03
G- A- T-
G- K- T-

複数カラムを検索させるときはこの方法で上手くいくようです。

複数だとforの部分でループするので、スペース区切り分検索をしてくれます。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>