MySQLのFIND_IN_SET関数の使い方を解説!

1つのカラムの中にカンマ区切りでデータが格納されているケースがあります。フォームのセレクトボックスで複数の選択肢が選択されたデータを格納する場合などに多いです。このようなカンマ区切りのデータをFIND_IN_SET関数を使って抽出する方法を解説していきます。

コンテンツ [表示]

  1. 1MySQLのFIND_IN_SET関数とは?
  2. 2MySQLの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カラムがappleid1のレコードのみならず、appleを含むid4のレコードも取得することが出来ましたね。

GeekHive採用サイト

関連記事