MySQL залишається приєднуватися до багатьох рядків - mysql, виберіть, групову, залиште приєднання
Щоб спростити мою проблему: скажімо, я маю 3 таблиці.
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
Тепер я роблю щось на кшталт:
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
який у моєму випадку ідеально працює, крім декількохякі мають багато стосунків з таблицею "Номери". Тому замість нових рядків у наборі результатів, що містять різні назви для "Люди" та "Речі" стосовно таблиці "Номери", я хотів би отримати лише два рядки:
1. kitchen, John, Andy, Laura, sink
2. bedroom, Mary, TV, bed
А. GROUP BY
на r.id буде тільки select
один рядок від кожного столу Будь-яка допомога високо цінується!
Відповіді:
3 для відповіді № 1Ось це те, що ви шукаєте:
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 для відповіді № 2
Так, вам потрібна група за пунктом, і вам потрібно скористатись GROUP_CONCAT функція Ви повинні об'єднати свої результати за допомогою People.fk_rooms та Thing.fk_rooms.
Можливо, ви можете скористатися двома різними запитами:Перший призведе до об'єднання номерів і людей, згрупованих за допомогою fk_rooms, вибравши три стовпці, вони - RoomsID, RoomName, People, а другий призведе до об'єднання номерів і речей, згрупованих за fk_rooms, вибравши три стовпці, вони є RoomID, RoomName, речі. У вашому запиті ви називаєте ці вибори як t1 і t2 і приєднуйтесь до t1 і t2 за номерамиID, виберіть t1.RoomName, t1.People, t2.Things.
Удачі.