MySQLでLIKE演算子であいまい検索を行ったりする場合に、引っかかってほしくないデータまで引っかかってしまう場合があります。例えばフォームからチェックボックスを付けた値だけを受け取る場合、カンマ区切りで数値を文字列として保存する方法がよく用いられますが、このような場合に便利なのが「FIND_IN_SET()」です。
LIKEを使用したあいまい検索
例えば下記のようなテーブルがあるとします。
【テーブル名「sample_form」】
form_id | kind |
---|---|
1 | 1,2,3,4,5 |
2 | 12 |
3 | 2,5 |
4 | 22,13 |
5 | 265 |
ここから「2」だけを一致させたい場合に、このようなSQL文を書いたとします。
select * from sample_form where kind LIKE '%2%';
このSQL文だと、全ての行が引っかかってしまいますので、意図した結果になりません。
FIND_IN_SET()を使用した例
そこで、SQL文を下記の通り書き換えます。
select * from sample_form where FIND_IN_SET('2', kind);
こうする事で、カンマ区切りでの完全一致で検索する事になりますので、form_idが1と3のデータのみ抽出できるようになります。
以上、カンマ区切りのデータを扱うときに便利なMySQL関数「FIND_IN_SET()」でした。