MySQLの一つのセルに、「,」(カンマ)を含む文字列があるとき、指定された文字列が、カンマで分割された要素の何番目かを調べるSQLが以下。
----------------------------------------------------------
SELECT FIND_IN_SET( 'Mon', 'Spa,ce,Mon,eky' );
-> 3
SELECT FIND_IN_SET( 'ce', 'Spa,ce,Mon,eky' );
-> 2
----------------------------------------------------------
※第1引数で指定した文字列が、引数STRLISTに含まれる値にマッチすれば、マッチしたリストの位置を返す。
※ STRLISTは、カンマ( , )で分割された文字列。
※引数STRLISTが空文字なら"0"を返す。
※どちらかの引数がNULLならNULLを返す。
※最初の引数にカンマが含まれる場合は、エラーとなる。
ユーザーデータの一つに、飼っているペットの種類とか、興味のある分野などの、複数の要素が含まれる可能性がある場合は、カンマで分割した文字列でVARCHAR型のカラムに入れておけば、この関数でWHERE指定できる。
例)
user_table
+−−−−+−−−−−−−−−−−+
|name | pet_kind |
+−−−−+−−−−−−−−−−−+
|Yamada | 2,3,6 |
+−−−−+−−−−−−−−−−−+
|Suzuki | 3,8,12,22 |
+−−−−+−−−−−−−−−−−+
・
・
・
※3番のペットを飼っている人の名前を調べる
-------------------------------------------------------------------------------------------
SELECT name FROM user_table WHERE FIND_IN_SET(3, pet_kind) > 0;
-------------------------------------------------------------------------------------------
結果:山田とスズキどちらもSLECTされる。
最初、MySQLもPHPとかperlみたいに、split的な関数があるんだろうなんて思って、たいして気にもせずデータを投入していたら、私の力では発見できなかった。
やばい!と思って、この関数で、かろうじて分割検索できたけど、カンマで分割していたのはたまたま。
もしカンマ以外の文字列で区切ってたら、とおもうと少しぞっとする。
----------------------------------------------------------
SELECT FIND_IN_SET( 'Mon', 'Spa,ce,Mon,eky' );
-> 3
SELECT FIND_IN_SET( 'ce', 'Spa,ce,Mon,eky' );
-> 2
----------------------------------------------------------
※第1引数で指定した文字列が、引数STRLISTに含まれる値にマッチすれば、マッチしたリストの位置を返す。
※ STRLISTは、カンマ( , )で分割された文字列。
※引数STRLISTが空文字なら"0"を返す。
※どちらかの引数がNULLならNULLを返す。
※最初の引数にカンマが含まれる場合は、エラーとなる。
ユーザーデータの一つに、飼っているペットの種類とか、興味のある分野などの、複数の要素が含まれる可能性がある場合は、カンマで分割した文字列でVARCHAR型のカラムに入れておけば、この関数でWHERE指定できる。
例)
user_table
+−−−−+−−−−−−−−−−−+
|name | pet_kind |
+−−−−+−−−−−−−−−−−+
|Yamada | 2,3,6 |
+−−−−+−−−−−−−−−−−+
|Suzuki | 3,8,12,22 |
+−−−−+−−−−−−−−−−−+
・
・
・
※3番のペットを飼っている人の名前を調べる
-------------------------------------------------------------------------------------------
SELECT name FROM user_table WHERE FIND_IN_SET(3, pet_kind) > 0;
-------------------------------------------------------------------------------------------
結果:山田とスズキどちらもSLECTされる。
最初、MySQLもPHPとかperlみたいに、split的な関数があるんだろうなんて思って、たいして気にもせずデータを投入していたら、私の力では発見できなかった。
やばい!と思って、この関数で、かろうじて分割検索できたけど、カンマで分割していたのはたまたま。
もしカンマ以外の文字列で区切ってたら、とおもうと少しぞっとする。

コメントする