2017-11-10 1 views
0

Ich habe das folgende Problem: Ich habe drei Tabellen, eine Benutzer-Tabelle, eine Tabelle Kategorien und eine Tabelle user_category, die die beiden ersten Tabellen mit Foregn-Tasten verbindet.MySQL Inner Join Merge Zeilen

Benutzer-Tabelle:

id  username 

1  user1 
... ... 

Kategorien Tabelle:

id category 

1  test1 
2  test2 
3  test3 
... ... 

user_category Tisch

id user_id category_id 
1  1   1 
2  1   2 
3  1   3 

I Now Ich möchte alle Benutzer mit ihren Kategorien auswählen, aber ich möchte nicht mehrere Zeilen desselben Benutzers haben. Stattdessen möchte ich alle Kategorien eines Benutzers in ein Kategoriefeld zusammenführen.

SELECT users.*, categories.category FROM user_category INNER JOIN users ON users.id = user_category.user_id LEFT JOIN categories ON categories.id = user_category.category_id 

Der Ausgang:

id  username  category 
1  user1  test1 
1  user1  test2 
1  user1  test3 

Aber ich will folgendes:

id  username  category 
1  user1  test1, test2, test3 

Gibt es eine Möglichkeit, dies zu tun?

+0

'test1, test2 verwenden können, test3' Sie nicht tun sollten und sollten lernen, wie Sie Ihre db nach Username –

+1

Verwenden GROUP_CONCAT und Gruppe zu normalisieren –

Antwort

2
SELECT users.id, users.username, GROUP_CONCAT(categories.category) as cats 
FROM user_category 
INNER JOIN users ON users.id = user_category.user_id 
LEFT JOIN categories ON categories.id = user_category.category_id 
GROUP BY users.id, users.username 

könnte tun, was Sie wollen.

Siehe http://www.sqlines.com/mysql/functions/group_concat

Mit TSQL Sie smth wie How Stuff and 'For Xml Path' work in Sql Server

+0

Das Problem ist, dass ich nur eine Kategorie für den Benutzer anstelle von allen bekomme. – pete

+2

@pete Es funktioniert, hier haben Sie ein funktionierendes Beispiel: http://rexttester.com/MTZROD6195 * Hinweis: Ich musste 'Benutzer' in' usersx' ändern, so dass es auf rextester laufen würde * – Piyin

+0

Vielen Dank! Ich weiß nicht, was falsch war, aber es funktioniert jetzt. – pete