Com o MySQL, a maneira mais fácil de fazer isso é armazenar todos caminhos na árvore, criando um fechamento transitivo .
table_children
parent child
0 0
1 1
2 2
3 3
4 4
0 1
0 2
0 3
0 4
1 2
1 3
1 4
3 4
Agora você pode consultá-lo assim:
SELECT t.*
FROM table_children c
JOIN table t ON c.child = t.id
WHERE c.parent = 0;
Veja também:
- Qual é a maneira mais eficiente/elegante de analisar uma tabela plana em uma árvore?
- Modelos para dados hierárquicos com SQL e PHP
- Antipadrões SQL:evitando as armadilhas da programação de banco de dados