単一のMySQLselectクエリから、2つの結合されたテーブルからすべての情報を階層的に取得するための最良かつ最も洗練された方法は何でしょうか?
私はそれらの2つのテーブルを持っています:
----------------- ------------------
| 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;
問題:jsonフラグメントを作成するための醜いforeachタイプのコードがたくさん残っています
「解決策」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
ここで、「employees」はすでにjsonフラグメントであり、company.idとnameをjsonifyするだけで済みます。しかし、mysqlでjsonフラグメントをビルドすることは非常に悪い習慣のようです。
洞察、または他の解決策はありますか?
どうもありがとう