尝试了 StackOverflow 上另一篇文章的帮助。但不知何故,我没有得到预期的结果。如果有人能提供帮助,我将不胜感激。
SELECT IF(child = '',parent,CONCAT('->',child)) as value
FROM
(SELECT parent.full_name as parent,child.full_name as child, parent.hierarchy_level
FROM hierarchy parent
INNER JOIN
(SELECT person_id,supervisor_person_id,full_name FROM hierarchy
UNION
SELECT null,person_id,'' FROM hierarchy)child
WHERE child.supervisor_person_id = parent.person_id
ORDER BY parent.hierarchy_level, parent,child
)parent_child
输出:
Peter
->Jackson
->Thomas
Jackson
->Marry
Marry
Thomas
->Steve
Steve
->Nelson
Nelson
预期:
Peter
- Thomas
-- Steve
-- Nelson
- Jackson
-- Marry
这是表格数据:
CREATE TABLE `hierarchy` (
`person_id` int(9) NOT NULL,
`supervisor_person_id` int(9) NOT NULL,
`full_name` varchar(255) NOT NULL,
`hierarchy_level` int(9) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `hierarchy` (`person_id`, `supervisor_person_id`, `full_name`, `hierarchy_level`) VALUES
(132, 2232, 'Peter', 1),
(456, 132, 'Thomas', 2),
(789, 132, 'Jackson', 2),
(111, 456, 'Steve', 3),
(124, 111, 'Nelson', 4),
(242, 789, 'Marry', 2);