Каким будет лучший и самый элегантный способ получить из одного запроса выбора MySQL всю информацию из двух соединенных таблиц, но иерархически?
У меня есть эти две таблицы:
----------------- ------------------
| Table COMPANY | | Table EMPLOYEE |
----------------- ------------------
| id | | id |
| companyName | | companyId |
----------------- | employeeName |
------------------
(for each company, many employees)
и я хочу вывести следующий иерархический фрагмент JSON:
[
{"id": 1,
"companyName": "Company A",
"employees": [
{"id": 1, "employeeName": "Employee 1"},
{"id": 2, "employeeName": "Employee 2"}
]},
{"id": 2,
"companyName": "Company B",
"employees": [
{"id": 3, "employeeName": "Employee 3"},
{"id": 4, "employeeName": "Employee 4"}
]}
]
«Решение» 1:
Сделайте полный выбор в соединенных таблицах и напишите код для создания фрагмента json:
select * from company, employee where employee.companyId = company.id;
Проблема: у меня осталось много уродливого кода типа foreach для создания фрагмента json.
«Решение» 2:
Сгруппировать по компании всех сотрудников в строку json:
select company.id, company.name,
concat('[',
group_concat('{"id": ', employee.id, ',
"employeeName": "', employee.employeeName,'"}'), ']') as employees
from company, employee where company.id = employee.companyId
group by company.id
Здесь «сотрудники» — это уже фрагмент json, мне нужно только jsonify company.id и имя. Но создание фрагмента json в mysql кажется очень плохой практикой.
Любое понимание или другое решение?
Большое спасибо