ラベル Kapow の投稿を表示しています。 すべての投稿を表示
ラベル Kapow の投稿を表示しています。 すべての投稿を表示

2014年11月21日金曜日

カンマ区切りの列を、縦に整形して表示する方法

Kapowでロボットを組む際に、どうしようか考えていた。

特定の文言たちを1列にカンマ区切りで指定する仕様を検討中のため、
いくつ入ってくるかわからない。
それをKapowの変数に格納しなければならないが、それが可変では困る!

Kapowにとっては、ループで何行あろうが関係ないループ処理でできてくれるのが一番いい。

となると、MySQLで勘考してくれるのが一番だと考えた。
その結果が以下である。


SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(NGWord,',',v.n),',',-1) as NGwords
FROM (SELECT NGWord FROM test01) AS c,
               ( SELECT 1 n 
UNION ALL SELECT 2   
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
UNION ALL SELECT 10
) AS v
WHERE  LENGTH(NGWord)-LENGTH(REPLACE(NGWord,',',''))+1 >=v.n


test01テーブルに、カンマ区切りの文字列が保持されているNGWordを用意して、
上記SQLを実行させた。
ただし仮にカンマ区切りで13個あったとしても、UNION ALLたちが10個までしかないため、
10個までしか出力されない。

どっちみち仕様として利用者には、「10個までならカンマ区切りで指定可能」と
言ってしまえば運用上問題なし!!

詳細なことは、以下のURLへ飛んでください。
(参考URL)
BAD DB設計に対するSQLパターン応用編1 カンマ区切りのカラムを列(縦方向に分解)Comments
http://d.hatena.ne.jp/IT7C/20130217/1361039857