【问题标题】:How to select multiple rows and return them as JSON in one column?如何选择多行并将它们作为 JSON 返回在一列中?
【发布时间】:2021-01-14 15:13:26
【问题描述】:

我在 MySQL 中有这样的数据(实际数据不同,但我只是为了让它更容易)

注意:children 列是 JSON

    SELECT id, name, children FROM people;
id name children
2 Jack ["5", "3"]
3 John Null
5 Sara Null

孩子不能有其他孩子,孩子不能在不同的表中,因为数据相似,我需要一次所有的人,我不想为每个孩子访问数据库

SELECT 后的数据应如下所示:

id name children
2 Jack [{'id': '5', 'name': 'Sara'},{'id': '3', 'name': 'John'}]
3 John Null
5 Sara Null

有可能吗,我该怎么做?

有没有更好的方法来做到这一点(不是另一个表)

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    我建议将您的表格布局更改为与 parent_id 列的父->子关系。

    当前布局混合了 json 字符串值和整数列值。当表格变大时,您也可能会遇到性能问题(目前只是猜测)。

    另一种方法是:

    https://www.db-fiddle.com/f/jbVqtZjZbmPAZ42S8A8fbT/1

    CREATE TABLE people (id INT, name TEXT, parent_id INT);
    INSERT INTO people (id, name, parent_id)
    VALUES 
    (2,'Jack', Null),
    (3,'John', 2),
    (5,'Sara', 2)
    ;
    
    
    SELECT p.id, p.name, 
    
    (SELECT JSON_ARRAYAGG(JSON_OBJECT('id', pc.id, 'name', pc.name)) FROM people pc
    WHERE pc.parent_id=p.id) AS children
    
    FROM people p
    

    【讨论】:

      猜你喜欢
      • 2021-03-28
      • 2010-11-16
      • 1970-01-01
      • 2022-06-29
      • 2021-12-15
      • 1970-01-01
      • 2019-12-27
      • 2011-02-22
      • 2011-08-27
      相关资源
      最近更新 更多