Dat hangt af van de daadwerkelijke implementatie van uw hiërarchie in de database. Als u geneste sets gebruikt ( http://mikehillyer.com/articles/managing-hierarchical-data- in-mysql/ ) kunt u het volledige ouder-naar-kind-pad ophalen via een enkele selectie.
Bijwerken :Ok, aangezien je met een aangrenzend lijstmodel gaat, raad ik aan om het knooppuntniveau in de tabel op te slaan. Het geeft u niet alleen de knooppuntdiepte in één query, maar u kunt ook het volledige pad naar dat knooppunt in één query ophalen (hoewel die query dynamisch moet worden gegenereerd):
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;
Aangezien je weet dat je node zich op niveau N bevindt, zijn er geen left joins nodig en gezien de juiste indexen op id / parent_id zou dit redelijk snel moeten zijn.
Het nadeel van deze aanpak is dat je node-niveau moet houden bijgewerkt tijdens knooppuntverplaatsingen, maar dat zou redelijk eenvoudig en snel moeten zijn, aangezien u het alleen voor het knooppunt zelf en zijn kinderen zou doen - niet voor het grootste deel van de tabel zoals u zou doen met geneste sets.