Я пытаюсь создать многоуровневый массив полного списка, чтобы нарисовать организационную диаграмму с использованием библиотеки Orgchart , файл JSON должен включать родителей, дочерних элементов, дочерних элементов и т. Д. Как вложенные JSON из MySQL запроса.
Я попытался создать массив с помощью JSON_OBJECT. Я загрузил запрос в db_fiddle . Я могу получить данные генерального директора и менеджера первого уровня, но я не могу получить остальные данные (супервизоров второго уровня и их сотрудников) в JSON данных.
Табличные данные:
DROP TABLE IF EXISTS `org_chart`;
CREATE TABLE IF NOT EXISTS `org_chart` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`parent` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `org_chart` (`id`, `name`, `title`, `parent`)
VALUES (1, 'staff-CEO', 'CEO', 0),
(2, 'firstlevel Managers', 'Manager', 1),
(3, 'firstlevel Manager2', 'Manager', 1),
(4, 'secondlevel2', 'supervisor', 2),
(5, 'secondlevel', 'supervisor', 2),
(6, 'secondlevel-2', 'supervisor', 3),
(7, 'staff1', 'staff', 4),
(8, 'staff2', 'staff', 5),
(9, 'staff3', 'staff', 6),
(10, 'staff4', 'staff', 4),
(11, 'staff5', 'staff', 5),
(12, 'staff6', 'staff', 6),
(13, 'staff7', 'staff', 4);
Запрос:
SELECT *
FROM (
SELECT JSON_OBJECT(
'id', o.id,
'name', o.name,
'title', o.title,
'parent', o.parent,
'children', JSON_ARRAYAGG(
JSON_OBJECT(
'id', o1.id,
'name', o1.name,
'title', o1.title,
'parent', o1.parent
)
)
) js
FROM org_chart o
LEFT JOIN org_chart o1 ON o.id = o1.parent
WHERE o.parent = 0
GROUP BY o.id, o.name, o.parent
) x
JSON, полученный в результате этого запроса:
{"id": 1, "name": "staff-CEO", "title": "CEO", "parent": 0, "children": [{"id": 2, "name": "firstlevel Managers", "title": "Manager", "parent": 1}, {"id": 3, "name": "firstlevel Manager2", "title": "Manager", "parent": 1}]}
скриншот вывода:
the desired output :
How to generate the full list?
Update
I have updated the code and i am able to see the full tree but it is not nested and it appear as repeated where each mid-parent has multi children please check it at db_fiddle , скриншот для большей ясности: введите описание изображения здесь