Questo è semplicemente un Modello di adiacenza tavolo? Quindi non è possibile in una query senza conoscere la profondità massima.
Uno spunto di riflessione è Gestire i dati gerarchici in MySQL (sebbene io non sostenga l'utilizzo del Modello di set nidificato per dati che si alterano regolarmente).
Con molti join (a sinistra), più precisamente:con tanti join a sinistra quanto la profondità massima dell'albero, sarà possibile in una query. Questo è il motivo per cui molte persone tendono a salvare la "profondità" di una categoria specifica, quindi sarai in grado di filtrare e limitare la quantità di join allo stesso tavolo a un importo più ragionevole.
Personalmente, per alterare regolarmente i dati:tendo a configurare un trigger su un inserimento/aggiornamento, che salverà/memorizzerà nella cache il "percorso" corrente di un nodo basato sugli ID (ad esempio:un percorso è "12/62/28/345 ', in cui ogni passaggio tra il delimitatore /
è la chiave primaria di un nodo genitore nell'ordine corretto (il genitore di 345 è 28, il genitore di 28 è 62, ecc.)), quindi posso interrogarlo con un solo join come questo (/ usato come separatore):
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>;