kotcich
@kotcich
Я скучный.

Как сделать запрос через тройную связь, при это получая все связанные значения 3 таблицы в массив к 1 записи?

3 таблицы: users, project_user, roles.
Входные данные: user_id, project_id (связей с проектом может быть несколько, так как на каждую связь накидывается свой role_id).
Я хочу, чтобы в случае если юзер имеет 2 связи с одним и тем же проектом (соответственно имеет 2 разные роли на нем), получался мною после запроса СРАЗУ 1 строкой (а не двумя), и в этой строке имел массив названий обеих ролей, то есть что то вроде этого:
{ id: 1, "username": "some", "project_id": 1, "roles": ['Вышибала', 'Кто-то'] }
.
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Mysql:
select json_object(
	'id', user_id,
	'username', username,
	'project_id', project_id,
	'roles', json_arrayagg(role)
) roles
from user_projects
join users on users.id = user_id
group by user_id, project_id;


MySQL json_arrayagg, json_object
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
GROUP_CONCAT()
Но это редко бывает полезно поскольку обычно нужны не только названия ролей, но и их идентификаторы
Если хочется "одной строчкой", то надо осваивать продвинутые ORM типа Doctrine
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы