Avec MySQL, la façon la plus simple de procéder est de stocker tout chemins dans l'arborescence, créant une fermeture transitive .
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
Vous pouvez maintenant l'interroger ainsi :
SELECT t.*
FROM table_children c
JOIN table t ON c.child = t.id
WHERE c.parent = 0;
Voir aussi :
- Quelle est la manière la plus efficace/élégante d'analyser une table plate dans un arbre ?
- Modèles pour les données hiérarchiques avec SQL et PHP
- Antipatterns SQL :éviter les pièges de la programmation de base de données