Toto je jen jednoduchý Model sousedství stůl? Pak to v jednom dotazu bez znalosti maximální hloubky nejde.
Námět k zamyšlení je Správa hierarchických dat v MySQL (ačkoli nepodporuji používání modelu vnořené sady pro data, která se pravidelně mění).
S velkým počtem (levých) spojení, přesněji:s tolika levými spojeními, jako je maximální hloubka stromu, to bude možné v jednom dotazu. To je důvod, proč má mnoho lidí tendenci ukládat si 'hloubku' konkrétní kategorie, takže budete moci filtrovat a omezit množství spojení do stejné tabulky na rozumnější množství.
Osobně pro pravidelné změny dat:Mám tendenci konfigurovat spouštěč na vložení / aktualizaci, která uloží / do mezipaměti aktuální 'cestu' uzlu na základě id (například:cesta je '12/62/28/345 ', ve kterém je každý krok mezi oddělovačem /
je primární klíč nadřazeného uzlu ve správném pořadí (rodič 345 je 28, rodič 28 je 62 atd.)), takže jej mohu dotazovat pouze jedním spojením takto (/ použito jako oddělovač):
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>;