Dette er blot en Adjacency Model bord? Så er det ikke muligt i én forespørgsel uden at kende den maksimale dybde.
Stof til eftertanke er Administration af hierarkiske data i MySQL (selvom jeg ikke går ind for at bruge Nested Set Model for data, der ændres regelmæssigt).
Med mange (venstre) joins, mere specifikt:med lige så mange venstre joins som den maksimale dybde af træet, vil det være muligt i én forespørgsel. Dette er grunden til, at mange mennesker har tendens til at gemme 'dybden' af en bestemt kategori, så du vil være i stand til at filtrere og begrænse antallet af joinforbindelser til den samme tabel til et mere fornuftigt beløb.
Personligt, for regelmæssig ændring af data:Jeg har en tendens til at konfigurere en trigger på en indsættelse / opdatering, som vil gemme / cache den aktuelle 'sti' for en node baseret på id'er (for eksempel:en sti er '12/62/28/345 ', hvor hvert trin mellem afgrænsningstegnet /
er den primære nøgle for en overordnet node i den korrekte rækkefølge (345s overordnede er 28, 28s overordnede er 62, osv.)), så jeg kan forespørge på den med kun én join som denne (/ bruges som separator):
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>;