Można to zrobić na dwa sposoby:listy sąsiedztwa i listy zagnieżdżone. Spójrz na Zarządzanie danymi hierarchicznymi w MySQL .
Masz listę sąsiedztwa. Nie, nie ma sposobu na rekurencyjne pobieranie wszystkich potomków za pomocą pojedynczej instrukcji SQL. Jeśli to możliwe, po prostu pobierz je wszystkie i zmapuj je wszystkie w kodzie.
Zestawy zagnieżdżone mogą robić to, co chcesz, ale staram się tego unikać, ponieważ koszt wstawienia rekordu jest wysoki i podatny na błędy.