Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Mysql select recursiva obter todos os filhos com vários níveis


Nenhuma das soluções anteriores funcionou para mim. Ambos só funcionam se os pais forem salvos no banco de dados em uma determinada ordem.

Devo admitir que não entendo completamente como a consulta funciona, mas poderia encontrar uma maneira que funcione para mim (pelo menos melhor do que as outras respostas).

Os dados com os quais a primeira e a segunda consulta não funcionam são:
idFolder , FolderName , idFolderParent
   1           ADoc           Null  
   2           ADoc1           7  
   3           ADoc2           2
   4           ADoc3           3
   5           ADoc4          Null
   6           ADoc5           5
   7           ADoc6           5

Se você usar a primeira e a segunda consultas neste conjunto de dados, para o id 5 você obterá apenas como resultado '6,7'. Mas se você usar minha consulta, obterá:'6,7,2,3,4' que é o resultado esperado.

Minha versão:
SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder 
WHERE FIND_IN_SET(idFolderParent, @pv)) AS lv FROM Folder 
JOIN
(SELECT @pv:=5) tmp
) a;

Espero que ajude alguém. Não posso comentar nem votar contra as outras respostas por causa da falta de reputação :(