单个mysql选择连接表到json层次片段,怎么样?

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)

"解决方案"1:

在连接表上进行完整选择,然后在创建json片段后编写一些代码:

select * from company, employee where employee.companyId = company.id;
Run Code Online (Sandbox Code Playgroud)

问题:我留下了许多丑陋的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
Run Code Online (Sandbox Code Playgroud)

在这里,"雇员"已经是一个json片段,我只需要jsonify company.id和name.但是在mysql中构建json片段似乎非常糟糕.

任何洞察力或其他解决方案?

非常感谢

Mor*_*kel 2

我可能会使用像您的解决方案 1 这样的查询,只需添加“按 company.id 排序”,然后对表进行一次循环,为每一行构建一个数据结构(如果公司与前一个相同)第一,将员工数据推送到公司中,否则,定义新公司并开始使用它来推送员工数据。

和 Carlos Quijano 一样,我在这里没有看到任何 foreach 混乱。(但是排序依据使其更容易处理)