To jest po prostu model przylegania stół? Wtedy nie jest to możliwe w jednym zapytaniu bez znajomości maksymalnej głębokości.
Pożywką do przemyśleń jest Zarządzanie danymi hierarchicznymi w MySQL (chociaż nie zalecam używania Modelu zestawu zagnieżdżonego dla danych, które zmieniają się regularnie).
Przy dużej liczbie (lewych) złączeń, a dokładniej:przy tylu złączach lewych, ile wynosi maksymalna głębokość drzewa, będzie to możliwe w jednym zapytaniu. To jest powód, dla którego wiele osób ma tendencję do zapisywania „głębokości” określonej kategorii, dzięki czemu będziesz mógł filtrować i ograniczać liczbę złączeń do tej samej tabeli do bardziej rozsądnej wartości.
Osobiście, do regularnej zmiany danych:zwykle konfiguruję wyzwalacz przy wstawieniu / aktualizacji, który zapisze / buforuje bieżącą 'ścieżkę' węzła na podstawie identyfikatora (na przykład:ścieżka to '12/62/28/345 ', w którym każdy krok między separatorem /
jest kluczem podstawowym węzła nadrzędnego we właściwej kolejności (345 rodzic to 28, rodzic 28 to 62, itd.)), więc mogę zapytać o to za pomocą tylko jednego sprzężenia w ten sposób (/ używany jako 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>;