2016-04-07 4 views
0

複数の列(カンマで区切ったものなど)を1つの列にマージすることが可能なのかどうか不思議でした。MySQL複数の列を1つの「一時的な」列にマージする

language_id | language_iso 
    1     NL 
    2     EN 
    3     GT 
    4     EN 

(ドメイン)

domain_id | domain_name 
    1    example 

そしてwebdomain

languagetodomain_id | languagetodomain_lang | languagetodomain_domain 
    1        1       1 
    2        2       1 
    3        4       1 
    4        3       1 

に言語をリンク別のテーブル:

だから、例えば、私は、これらのテーブル(言語)を持っていますそして、この順番で検索してください(1つのコラムをメモとして)

domain_id | domain_name | TemporaryColumn 
    1    example   {1,2,4,3} 
+2

[カンマ区切りリストとしてMySQLの結果](http://stackoverflow.com/questions/662207/mysql-results-as-comma-separated-list) – lad2025

+1

'GROUP_CONCAT'は仕事を行います。 – lad2025

+0

http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.htmlを使用してみてください。 –

答えて

2

これは動作するはずです:

SELECT Domains.*, CONCAT('{',GROUP_CONCAT(languagetodomain_lang),'}') AS TemporaryColumn 
FROM Domains 
JOIN LanguageToDomain ON LanguageToDomain.languagetodomain_domain = Domains.domain_id 
GROUP BY domain_id 

機能GROUP_CONCATグループ値は、コンマで区切っ。私は通常のCONCAT機能を使用して角括弧を追加しました。 ドメインごとにlanguagetodomain_langが必要になるように、domain_idでグループ化する必要があります。

私がlanguagetodomainのテーブル名を指定しなかったので推測しました。綴ら

+0

私は1行しか返せないというメッセージを受け取ります。だから、これはどのように複数の行の問題を修正するのだろうか? – Testuser075

+0

私はgroup_concatをconcat_wsと混ぜて最初に修正しました – Jester

+0

が固定されていて、どこにそのエラーが出るのか分かりません。あなたは今あなたが持っているものを見るために更新することができますか? – Jester

0

Group_Concatあなたは、行全体でデータを統合することができます。

SELECT D.Domain_Id 
    , D.Domain_Name 
    , Group_Concat(LanguageToDomain_Lang, 
     ORDER BY LanguageToDomain_ID DESC SEPARATOR ',') as TemporaryColumn 
FROM Domains D 
INNER JOIN WebDomain WD 
on D.Domain_ID = WD.LanguageToDomain_ID 
GROUP BY D.Domain_Id, D.Domain_Name 
関連する問題