2016-04-07 5 views
0

Ich war neugierig auf die Tatsache, wenn es möglich ist, mehrere Spalten (getrennt durch ein Komma oder etwas anderes) in eine Spalte zusammenzuführen.MySQL mehrere Spalten in eine 'temporäre' Spalte zusammenfügen

So zum Beispiel, ich habe diese Tabellen (Sprachen):

language_id | language_iso 
    1     NL 
    2     EN 
    3     GT 
    4     EN 

(Domains)

domain_id | domain_name 
    1    example 

Und eine andere Tabelle, die die Sprache in einem webdomain Link

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

Und rufen Sie sie in dieser Reihenfolge (EINE Spalte als Erinnerung)

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

[MySQL Ergebnisse als durch Kommata getrennte Liste] (http://stackoverflow.com/questions/662207/mysql-results-as-comma-separated-list) – lad2025

+1

'GROUP_CONCAT' wird die Arbeit machen. – lad2025

+0

Versuchen Sie, http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html zu verwenden. –

Antwort

2

sollte diese Arbeit:

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

Die Funktion GROUP_CONCAT Gruppen Werten sie durch ein Komma getrennt werden. Ich habe die Klammern mit der normalen CONCAT Funktion hinzugefügt. Sie müssen auf der Domain-ID gruppieren, so dass alle languagetodomain_lang für jede Domäne, die Sie haben, benötigt.

Ich habe den Tabellennamen für sprachtodomain erraten, wie Sie es nicht zur Verfügung gestellt haben.

+0

Ich bekomme diese Nachricht, dass ich nur 1 Zeile zurückgeben kann. Wie wird das Problem mit mehreren Zeilen behoben? – Testuser075

+0

Sorry, ich habe group_concat mit concat_ws verwechselt. Lass es mich zuerst beheben – Jester

+0

behoben, und ich sehe nicht wirklich, wo Sie diesen Fehler bekommen würden. Können Sie aktualisieren, um zu sehen, was Sie jetzt haben? – Jester

0

buchstabiert:

Group_Concat Sie Daten in Zeilen zu kombinieren.

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 
Verwandte Themen