FIND_IN_SET ; MySQL
目的
- FIND_IN_SET の 使い方を知ること
1-0. FIND_IN_SET / 単一コマンド
1-1. テーブルを使ったコマンド
FIND_IN_SET / 単一コマンド
公式ドキュメントより
FIND_IN_SET(str,strlist)
N 個の部分文字列で構成されるリスト strlist に、文字列 str が含まれている場合は、1 から N までのいずれかの値を返す。文字列のリストは、それぞれの間を ‘,’ 文字で区切られた各部分文字列で構成される文字列である。最初の引数が定数文字列で、2 番目の引数が SET 型のカラムの場合、FIND_IN_SET() 関数はビット演算を使用するよう最適化される。 str が strlist に含まれていない場合や、strlist が空の文字列の場合は、0 を返す。どちらの引数も NULL の場合は、NULL を返す。 最初の引数にカンマ ‘,’ が含まれていると、この関数は正しく動作しない。 <
例
mysql> SELECT FIND_IN_SET('X', 'a,X,a,a'); +-----------------------------+ | FIND_IN_SET('X', 'a,X,a,a') | +-----------------------------+ | 2 | +-----------------------------+ 1 row in set (0.00 sec)
mysql> SELECT FIND_IN_SET('X', 'a,a,a,a,X,a'); +---------------------------------+ | FIND_IN_SET('X', 'a,a,a,a,X,a') | +---------------------------------+ | 5 | +---------------------------------+
mysql> SELECT FIND_IN_SET('X', 'a,a,a'); +---------------------------+ | FIND_IN_SET('X', 'a,a,a') | +---------------------------+ | 0 | +---------------------------+ 1 row in set (0.00 sec)
mysql> SELECT FIND_IN_SET(NULL, NULL); +-------------------------+ | FIND_IN_SET(NULL, NULL) | +-------------------------+ | NULL | +-------------------------+ 1 row in set (0.00 sec)
テーブルを使ったコマンド
次の 2 テーブルを用意する
program
program_id | program_name |
---|---|
1 | C |
2 | Java |
3 | Ruby |
4 | PHP |
5 | objC |
member
member_id | member_name | program_ids |
---|---|---|
1 | 'Hirano' | '1,5' |
2 | 'Kawabe' | '1,2' |
3 | 'Miyata' | '3,4' |
4 | 'Tsuruno' | '2,3,4' |
C が使える人を探したい
mysql> SELECT * FROM member WHERE FIND_IN_SET(1, program_ids); +-----------+-------------+-------------+ | member_id | member_name | program_ids | +-----------+-------------+-------------+ | 1 | Hirano | 1,5 | | 2 | Kawabe | 1,2 | +-----------+-------------+-------------+ 2 rows in set (0.00 sec)
Java が使える人を探したい
mysql> SELECT * FROM member WHERE FIND_IN_SET(2, program_ids); +-----------+-------------+-------------+ | member_id | member_name | program_ids | +-----------+-------------+-------------+ | 2 | Kawabe | 1,2 | | 4 | Tsuruno | 2,3,4 | +-----------+-------------+-------------+ 2 rows in set (0.00 sec)
テーブル用意までのソースコード
CREATE TABLE program ( program_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, program_name char(255) NOT NULL ); CREATE TABLE member ( member_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, member_name char(255) NOT NULL, program_ids char(255) NOT NULL ); INSERT INTO program (program_name) VALUES ('C'), ('Java'), ('Ruby'), ('PHP'), ('objC'); INSERT INTO member (member_name, program_ids) VALUES ('Hirano', '1,5'), ('Kawabe', '1,2'), ('Miyata', '3,4'), ('Tsuruno', '2,3,4');
引用元