特定の文言たちを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
0 件のコメント:
コメントを投稿