2016-12-13 4 views
1

У меня есть таблица вроде этого:Получение всех детей (и их детей) данного родительского узла в реляционной таблице MySQL/MariaDB

parent, child 
0 2 
0 8 
2 3 
2 6 
3 4 
3 5 
6 7 
6 9 
9 10 

Я ищу для запроса, чтобы выбрать суб- дерево данного родителя, т. е. если данный родитель «6», выход должен быть: {10,9,7,6}

+0

MySQL не поддерживает рекурсивные запросы, что идеально подходит для такого рода проблем. Сколько уровней глубины может быть деревом, и является ли эта максимальная глубина фиксированной? –

+0

не зафиксировано глубиной, но я думаю, что не более 6 уровней глубины. Печально слышать, что MySQL не поддерживает рекурсивные запросы D :! – candlejack

+1

Вы можете сделать самостоятельное присоединение 5 раз, если это будет приемлемо для вас. –

ответ

2

Chek this. Значение, указанное в @pv: = '6', должно быть установлено на идентификатор родителя, который вы хотите найти всех его потомков.

также вы можете проверить живой Demo updated

  select Parent, concat ("{" ,Parent,",",GROUP_CONCAT(concat (child)SEPARATOR ','),"}") as Child 
      from (select * from #TableName 
        order by parent, child) s, 
        (select @pv := '6') initialisation 
      where find_in_set(parent, @pv) > 0 
      and  @pv := concat(@pv, ',', child); 

Выход: {6,7,9,10}

Для отображения Чайлдс с родителем в одно использование столбца ниже запроса:

  select parent as child from tchilds where parent = @pv2 
      union 
      select Child 
      from (select * from tchilds 
        order by parent, child) s, 
        (select @pv2 := '6') initialisation 
      where find_in_set(parent, @pv2) > 0 
      and  @pv2 := concat(@pv2,',', child) 

Выход

enter image description here

дайте нам знать, если у вас есть еще какие вопросы или проблемы.

+0

отличная работа от вас. Я проголосую –

+0

TQ DBA @BerndBuffen –

+0

Спасибо, я проголосовал за ваш ответ, но мне действительно не нужен вывод concat, только один столбец, который выводит эти числа, вы можете отредактировать свой ответ, так что я могу проверить на phpmyadmin. – candlejack

Смежные вопросы