Генерация многоуровневого массива из запроса MYSQL - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь создать многоуровневый массив полного списка, чтобы нарисовать организационную диаграмму с использованием библиотеки 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}]}

скриншот вывода:

enter image description here

the desired output : enter image description here

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 , скриншот для большей ясности: введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...