Dit is gewoon een Aangrenzend model tafel? Dan is het niet mogelijk in één zoekopdracht zonder de maximale diepte te kennen.
Stof tot nadenken is Hiërarchische gegevens beheren in MySQL (hoewel ik geen voorstander ben van het gebruik van het Nested Set Model voor gegevens die regelmatig veranderen).
Met veel (linkse) joins, meer specifiek:met zoveel left joins als de maximale diepte van de boom, is het mogelijk in één query. Dit is de reden waarom veel mensen de neiging hebben om de 'diepte' van een specifieke categorie op te slaan, zodat je het aantal joins aan dezelfde tafel kunt filteren en beperken tot een meer zinnig aantal.
Persoonlijk, voor het regelmatig wijzigen van gegevens:ik heb de neiging om een trigger te configureren op een insert / update, die het huidige 'pad' van een knooppunt op basis van id's opslaat / cachet (bijvoorbeeld:een pad is '12/62/28/345 ', waarbij elke stap tussen het scheidingsteken /
is de primaire sleutel van een ouderknooppunt in de juiste volgorde (345's ouder is 28, de ouder van 28 is 62, enz.)), dus ik kan het opvragen met slechts één join zoals deze (/ gebruikt als scheidingsteken):
SELECT j.*
FROM tablename o
JOIN tablename j
WHERE j.path LIKE CONCAT (o.path,'/%')
AND j.id != o.id -- skip parent asked for.
WHERE o.id = <the id of the node you're looking for>;