MySQL Left Join Viele zu einer Zeile - mysql, select, group-by, left-join

Um mein Problem zu vereinfachen: Sagen wir, ich habe 3 Tische.

Rooms              People                    Things
--------           --------                  --------
id| name           id | name | fk_rooms      id | name | fk_rooms
-----------        ---------------------     ---------------------
1 | kitchen        1  | John | 1              1 | TV   | 2
2 | bedroom        2  | Mary | 2              2 | bed  | 2
3  | Andy | 1              3 | sink | 1
4  | Laura| 1

Jetzt mache ich etwas wie:

SELECT r.name AS room_name, p.name AS name, t.name AS thing FROM Rooms r
LEFT JOIN People p ON p.fk_rooms = r.id
LEFT JOIN Things t ON t.fk_rooms = r.id

was in meinem Fall bis auf wenige einwandfrei funktioniertdie viele Beziehung mit der "Rooms" -Tabelle haben. Anstatt neue Zeilen in der Ergebnismenge zu erhalten, die die verschiedenen Namen für "Personen" und "Dinge" in Bezug auf die Tabelle "Räume" enthalten, möchte ich nur zwei Zeilen erhalten:

1. kitchen, John, Andy, Laura, sink
2. bedroom, Mary, TV, bed

EIN GROUP BY auf r.id wird nur select eine Reihe von jedem Tisch. Jede Hilfe wird sehr geschätzt!

Antworten:

3 für die Antwort № 1

Hier suchen Sie:

SELECT r.name AS room_name,
GROUP_CONCAT(p.name separator ",") AS people_name,
GROUP_CONCAT(t.name separator ",") AS things
FROM Rooms r
LEFT JOIN People p ON p.fk_rooms = r.id
LEFT JOIN Things t ON t.fk_rooms = r.id
GROUP BY r.id

1 für die Antwort № 2

Ja, Sie brauchen die group by-Klausel, und Sie müssen die verwenden GROUP_CONCAT Funktion. Sie sollten Ihre Ergebnisse nach People.fk_rooms und Thing.fk_rooms gruppieren.

Vielleicht könnten Sie zwei verschiedene Abfragen verwenden:Die erste ergibt die Verknüpfung von Räumen und Personen, gruppiert nach fk_rooms, nachdem sie drei Spalten ausgewählt haben, sie sind RoomsID, ​​RoomName, People, während die zweite die Verknüpfung von Rooms und Thing ergibt, gruppiert nach fk_rooms, nachdem drei Spalten ausgewählt wurden, Sie sind RoomID, RoomName, Things. In Ihrer Abfrage benennen Sie diese Auswahlen als t1 und t2 und verbinden t1 und t2 mit RoomsID, ​​wählen Sie t1.RoomName, t1.People, t2.Things.

Viel Glück.