Получить результат объединения нескольких таблиц в одну строку


8

У меня есть эти 2 таблицы:

table1:

id | name
---------
1  | john
2  | jack

table2:

id | profile_id | institution
-----------------------------
1  | 1          | SFU
2  | 1          | UBC
3  | 2          | BU
4  | 2          | USC
5  | 2          | SFU

Если я хочу получить всю информацию о пользователе, используя его ID пользователя, я могу просто присоединиться к ним, используя это:

select a.id, a.name, b.institution from table1 a, table2 b
where a.id = USER_ID and a.id = b.profile_id

который для USER_ID = 1 возвращает:

id | name | institution
-----------------------
1  | john | SFU
1  | john | UBC

То, что мне нужно, это на самом деле 1 уникальная строка вместо нескольких строк. Можно ли каким-то образом получить что-то подобное? (Я не видел что-то, чтобы сделать это, но я не уверен)

id | name | institution
-----------------------
1  | john | [SFU, UBC]

Ответы:


8

Вы можете использовать функцию GROUP_CONCAT

SELECT a.id, a.name, CONCAT('[',GROUP_CONCAT(b.institution),']') institution
FROM table1 a INNER JOIN table2 b
ON a.id = b.profile_id
WHERE a.id = USER_ID
GROUP BY a.id, a.name;

или с вашим оригинальным запросом

select a.id, a.name, CONCAT('[',GROUP_CONCAT(b.institution),']') institution
from table1 a, table2 b where a.id = USER_ID and a.id = b.profile_id
group by a.id, a.name;

Попробуйте!


GROUP_CONCAT делает волшебство! ура
AliBZ

@RolandoMySQLDBA "... и вот мои часы заканчиваются": P, я искал это с давних времен. Спасибо
PHP Mentor
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.