MariaDB覚書 カンマ区切りの文字列を縦に並べる

某QAサイトを眺めてまして、
まぁ上記のようなことをやりたいと質問している人がいて、
そもそも、DBなんだから、そんなことやる必要ないだろ?、とか逆だろ?とか
書いてあるのね。

いやいや、やりたいんだからしょうがないでしょ!!
って思うんですよ、私は。
と、質問者でもないのに、勝手に外野がイキリ立ってもしょうがないだけどさ。

で、なんとか簡単にできないものかって思って調べてたら、FIND_IN_SETというものが使えそうなんだね。

FIND_IN_SET

例えば、
SELECT FIND_IN_SET(‘a’, ‘a,c,d’)
とすると、1と返ってくる。
SELECT FIND_IN_SET(‘d’, ‘a,c,d’)
とすると、3と返ってくる。
んで、
SELECT FIND_IN_SET(‘e’, ‘a,c,d’)
とすると0って返ってくる。
つまりは、第1引数で設定したものが第2引数のどこにあるか、教えてくれるわけ。

で、このままだとアレなんで、これにマスタを紐づけてやるの。

cd |name
—————
egg |たまご
bacon |ベーコン
apple |りんご
cubet |キャベツ

という、sozai テーブルがあったとして、
これを使って、文字列 ’bacon,apple’ を縦にするのよ!

1
2
3
SELECT cd, name
FROM sozai
WHERE FIND_IN_SET(cd, 'bacon,apple') > 0

とすると、
cd |name
—————
bacon |ベーコン
apple |りんご
と、表示される!!

え、sozaiテーブルみたいなマスタテーブルないとダメじゃんって?
まぁ、そこはご愛敬ということで・・・

Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.