知っておくと便利なMySQL関数 "FIND_IN_SET"
こんにちは、初夏なのにもう夏バテ気味のinoueです。今日もオクラ買って帰ろうっと。
さて、知っておくと便利なMySQL関数 FIND_IN_SET のお話です。
基本的には標準SQLでクエリは書いたほうがいいのですが、MySQL固有の関数なども状況に応じて利用すると 作業効率がアップするので、そんな一例を今回ご紹介します。
http://dev.mysql.com/doc/refman/5.1/ja/string-functions.html より引用:
FIND_IN_SET(str,strlist)
ストリング str が N サブストリングで構成されるストリング リスト strlist 内にある場合は、1 から N の範囲の値を戻します。
ストリング リストは、‘,’ 文字で区切られたサブストリングで構成されたストリングです。
id | types |
---|---|
1 | 1,12,23,31 |
2 | 12 |
3 | 23 |
4 | 31 |
5 | 1 |
例えば上記のようなテーブル sample に対して「カラム types に "1" がある」という条件でレコード抽出を行うとします。
カンマ区切りで数値を文字列として保存する方法は、チェックボックスなどの複数選択の値を保存する方法としてよく使う方法かと思います。
このとき、単純に INSTR(type, '1') などとはできませんよね。'12'や'31'などには合致しないようにしたいのですから。
そこで、FIND_IN_SET()の出番です。
SELECT * FROM sample WHERE FIND_IN_SET('1', types);
これでテーブル sample からは ID 1と5 のみが抽出できます。
とっても簡単な方法なので、ぜひ活用してください。