O MySQL não suporta consultas recursivas, então você precisa fazer da maneira mais difícil:
- Selecione as linhas em que
ParentID = X
ondeX
é sua raiz. - Colete o
Id
valores de (1). - Repita (1) para cada
Id
de (2). - Continue recorrendo manualmente até encontrar todos os nós folha.
Se você conhece uma profundidade máxima, pode unir sua tabela a ela mesma (usando LEFT OUTER JOINs) até a profundidade máxima possível e, em seguida, limpar os NULLs.
Você também pode alterar sua representação de árvore para conjuntos aninhados .