Как выровнять иерархию из одной таблицы соединений - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть таблица, которая описывает иерархические отношения без ограничений по размеру. Простым примером будет:

|ParentID |Child ID|
|1        |2       |
|2        |3       |
|1        |4       |
|5        |6       |

Мне нужен запрос, который для данного родителя выдает плоский список всех дочерних элементов, вплоть до 3, он просто вернет 4, но для 1 это вернуло бы 2,3,4.

Я перешел на MySQL с многолетнего опыта работы с SQL Server, поэтому все еще привыкаю к ​​тому, как работают его более продвинутые функции запросов. Есть несколько примеров этого на SO, но они работают только на иерархиях с фиксированными границами по глубине. Я использую MySQL 5.7, поэтому, к сожалению, у меня нет CTE.

1 Ответ

0 голосов
/ 30 сентября 2019

После еще большего количества поисков в Google, я придумал кое-что на основе этого вопроса: Как создать иерархический рекурсивный запрос MySQL

select  distinct ChildID 
from    (select * from ParentChild) children,
        (select @ids := 1) top_level
where   find_in_set(ParentID, @ids)
and     length(@ids := concat(@ids, ',', ChildID))

Я не проверял его на некоторыхдействительно большие иерархии, но пока кажется, что я делаю то, что хочу.

...