2017-07-28 7 views
0

にカンマ区切り値の数が多いの欄にカンマ区切りの文字列を取得し、私はこれが好きで、SQLテーブルがあります。 1 [SQLテーブル画像] 1は、効率的にMySQLの

を私は現在に次のクエリを使用しています単一カンマ区切り値取得:私はSELECT 1 n UNION ALL SELECT 2を使用していて、それはカンマ区切り値の数が多いためにうまく機能していないとしてこれを行うことができますし、そうで取得するより良い方法があるかどう

SELECT 
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ',', numbers.n), ',', -1) name 
FROM 
    (SELECT 1 n UNION ALL SELECT 2 
    UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) numbers INNER JOIN mytable 
    ON CHAR_LENGTH(name) 
    -CHAR_LENGTH(REPLACE(name, ',', ''))>=numbers.n-1 where SUBSTRING_INDEX(SUBSTRING_INDEX(name, ',', numbers.n), ',', -1) = 'm'; 

を私は思っていました複数のコンマ区切り値

+1

3NFテーブルレイアウトを使用すると、値がカンマで区切られたリストにあり、新しいテーブルではないのはなぜですか? – Progman

+0

これは実際にはコンマで区切られたデータを入力するフォームの一部です。したがって、データはコンマで区切られた列に保存されます。 –

答えて

0

はい、良い方法があります。テーブルとデータを3NFテーブルレイアウトに変換します。これにより、データベースのクエリを書くのがはるかに簡単になります。