To závisí na skutečné implementaci vaší hierarchie v databázi. Pokud používáte model vnořených sad ( http://mikehillyer.com/articles/managing-hierarchical-data- in-mysql/ ) můžete načíst úplnou cestu rodiče k potomkovi jediným výběrem.
Aktualizovat :Dobře, protože používáte model seznamu sousedství, doporučuji uložit úroveň uzlů do tabulky. Nejen, že vám poskytne hloubku uzlu v jednom dotazu, ale také vám umožní získat celou cestu k tomuto uzlu v jednom dotazu (ačkoli by tento dotaz musel být generován dynamicky):
SELECT n1.name AS lvl1, n2.name as lvl2, n3.name as lvl3, ..., nN.name as lvlN
FROM nodes AS n1
JOIN nodes AS n2 ON n2.parent_id = n1.id
JOIN nodes AS n3 ON n3.parent_id = n2.id
...
JOIN nodes AS nN ON nN.parent_id = n(N-1).id
WHERE nN.id = myChildNode;
Vzhledem k tomu, že víte, že váš uzel je na úrovni N, není potřeba levá spojení a vzhledem k příslušným indexům na id / parent_id by to mělo být přiměřeně rychlé.
Nevýhodou tohoto přístupu je, že budete muset udržovat úroveň uzlu aktualizováno během přesunů uzlů, ale mělo by to být přiměřeně přímočaré a rychlé, protože byste to dělali pouze pro samotný uzel a jeho potomky – nikoli pro většinu tabulky, jak byste to dělali u vnořených sad.