Lud*_*ppo 10 mysql sql json hierarchical
从单个 MySQL选择查询来自两个连接表的所有信息,但是以分层方式检索的最佳和最优雅的方法是什么?
我有这两个表:
----------------- ------------------
| Table COMPANY | | Table EMPLOYEE |
----------------- ------------------
| id | | id |
| companyName | | companyId |
----------------- | employeeName |
------------------
(for each company, many employees)
Run Code Online (Sandbox Code Playgroud)
我想输出以下分层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"}
]}
]
Run Code Online (Sandbox Code Playgroud)
在连接表上进行完整选择,然后在创建json片段后编写一些代码:
select * from company, employee where employee.companyId = company.id;
Run Code Online (Sandbox Code Playgroud)
问题:我留下了许多丑陋的foreach类型代码来创建json片段
按公司所有员工分组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
Run Code Online (Sandbox Code Playgroud)
在这里,"雇员"已经是一个json片段,我只需要jsonify company.id和name.但是在mysql中构建json片段似乎非常糟糕.
任何洞察力或其他解决方案?
非常感谢
我可能会使用像您的解决方案 1 这样的查询,只需添加“按 company.id 排序”,然后对表进行一次循环,为每一行构建一个数据结构(如果公司与前一个相同)第一,将员工数据推送到公司中,否则,定义新公司并开始使用它来推送员工数据。
和 Carlos Quijano 一样,我在这里没有看到任何 foreach 混乱。(但是排序依据使其更容易处理)
| 归档时间: |
|
| 查看次数: |
3984 次 |
| 最近记录: |