Това зависи от действителното изпълнение на вашата йерархия в базата данни. Ако използвате модел на вложени набори ( http://mikehillyer.com/articles/managing-hierarchical-data- в-mysql/ ) можете да извлечете пълния път от родител до дете чрез един избор.
Актуализиране :Добре, тъй като ще използвате модел на списък на съседство, предлагам да съхраните нивото на възел в таблицата. Той не само ще ви даде дълбочината на възела в една заявка, но също така ще ви позволи да извлечете целия път до този възел в една заявка (въпреки че тази заявка трябва да бъде генерирана динамично):
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;
Тъй като знаете, че вашият възел е на ниво N, няма нужда от леви съединения и, като се имат предвид подходящи индекси на id / parent_id, това трябва да бъде сравнително бързо.
Недостатъкът на този подход е, че ще трябва да поддържате ниво на възел се актуализира по време на преместване на възел, но това трябва да бъде сравнително лесно и бързо, тъй като бихте го направили само за самия възел и неговите деца, а не за по-голямата част от таблицата, както бихте направили с вложените набори.