Como dito nos comentários, não há um caminho curto com o mysql.
MAS!
Se você tiver a possibilidade de alterar a estrutura do banco de dados, poderá implantar um design melhor para lidar com hierarquias semelhantes a árvores.
Se você seguir ESTE TUTORIAL de Bill Karwin (AQUI é a resposta original que faz referência a esse tutorial de apresentação de slides), você pode encontrar 4 métodos usados para modelar uma estrutura hierárquica:
- Lista de afiliação
- Enumeração de caminho
- Conjuntos aninhados
- Tabela de fechamento
Agora, o melhor modelo possível é o 4º (deixo descrições dos outros 3 modelos para o leitor), que basicamente precisa de 2 tabelas:uma para os elementos e outra para os caminhos. Na tabela de caminhos (a própria tabela de fechamento), você armazenará todos os caminhos de cada nó para cada descendente (não apenas os filhos diretos!).
Sugere-se salvar também o comprimento do caminho para cada linha, porque facilita a consulta de filhos imediatos na árvore.
Mesmo que esta solução exija mais espaço, ela tem o melhor desempenho geral e é realmente fácil de usar:ela não depende de consultas recursivas E garante integridade referencial para todo o conjunto de dados!
Por exemplo, para obter todos os filhos do nó #4:
select a.*
from nodes a
join paths b
on a.node_id = b.descendant
where b.ancestor = 4
Outro exemplo:obtenha todos os ancestrais do nó #11
select a.*
from nodes a
join paths b
on a.node_id = b.ancestor
where b.descendant = 11
precisa deletar a subárvore do nó #6
delete from paths where descendant in
(select descendant from paths where ancestor = 6)