Как выбрать несколько строк и вернуть их как JSON в одном столбце?

#mysql #sql

#mysql #sql

Вопрос:

У меня есть эти данные в MySQL, которые выглядят следующим образом (фактические данные отличаются, но я просто хочу упростить их)

Примечание: дочерний столбец — это JSON

     SELECT id, name, children FROM people;
 
ID Имя дочерние элементы
2 Джек [«5», «3»]
3 Джон Null
5 Сара Null

у дочерних элементов не может быть других дочерних элементов, дочерние элементы не могут находиться в другой таблице, потому что данные похожи, и мне нужны все люди сразу, и я не хочу получать доступ к базе данных для каждого дочернего элемента

Данные должны выглядеть так после ВЫБОРА:

ID Имя дочерние элементы
2 Джек [{‘id’: ‘5’, ‘name’: ‘Sara’},{‘id’: ‘3’, ‘name’: ‘John’}]
3 Джон Null
5 Сара Null

возможно ли это, как я могу это сделать?

есть ли лучший способ сделать это (не в другой таблице)

Ответ №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