MySQLのFIND_IN_SET関数の使い方を解説!
1つのカラムの中にカンマ区切りでデータが格納されているケースがあります。フォームのセレクトボックスで複数の選択肢が選択されたデータを格納する場合などに多いです。このようなカンマ区切りのデータをFIND_IN_SET関数を使って抽出する方法を解説していきます。
MySQLのFIND_IN_SET関数とは?
皆さんはMySQLのFIND_IN_SET
関数をご存じでしょうか?
FIND_IN_SET
関数はMySQLの文字列関数の1つで、1つのカラムにカンマ区切りで格納されているデータを検索して抽出することができる関数です。
基本的に1つのカラムにカンマ区切りで複数の値を格納するよりは複数のレコードに分けるのがベターかと思いますが、いざというときにFIND_IN_SET
関数は使えると便利ですので、使い方を紹介していきたいと思います。
MySQLのFIND_IN_SET関数の使い方
それではFIND_IN_SET
関数の使い方を紹介していきます。
下記のようなテーブルとデータを用意しました。
mysql> DESC fruits;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| fruit | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM fruits;
+----+-------------+
| id | fruit |
+----+-------------+
| 1 | apple |
| 2 | orange |
| 3 | lemon |
| 4 | apple,lemon |
+----+-------------+
4 rows in set (0.00 sec)
fruit
カラムにカンマ区切りで値が格納されているデータが存在します。
この中から、例えばapple
という文字が入っているデータを抽出する際にFIND_IN_SET
関数を使うこと簡単に行うことが出来ます。
まずはFIND_IN_SET
関数の構文を紹介します。
FIND_IN_SETの構文
FIND_IN_SET(str, strlist)
カンマ区切りで構成されたN部分文字列strlist
内にstr
がある場合、1からNまでの範囲内の値を返してくれます。strlist
内にstr
がない場合は0を返します。
レコードを抽出する場合のFIND_IN_SET
関数の使い方はWHERE
句の後で使用し、第一引数に検索した文字列の値を指定して第二引数には検索対象のカラムを指定します。
mysql> SELECT * FROM fruits WHERE FIND_IN_SET('apple', fruit);
+----+-------------+
| id | fruit |
+----+-------------+
| 1 | apple |
| 4 | apple,lemon |
+----+-------------+
2 rows in set (0.01 sec)
fruit
カラムがapple
のid
が1
のレコードのみならず、apple
を含むid
が4
のレコードも取得することが出来ましたね。
