Jeśli pytasz o "Czy w mysql są zapytania rekurencyjne?" odpowiedz „NIE”.
Ale jest bardzo dobre podejście do tego.
Utwórz tabelę pomocniczą (mówiąc CatHierarchy)
CatHierarchy:
SuperId, ChildId, Distance
------------------------------
1 1 0
1 2 1
2 2 0
Te nadmiarowe dane pozwalają łatwo w 1 zapytaniu wybrać dowolną hierarchię, aw 2 wstawić obsługę dowolnej hierarchii (usunięcie wykonywane również w 1 zapytaniu za pomocą kaskadowej integralności).
Więc co to znaczy. Śledzisz wszystkie ścieżki w hierarchii. Każdy węzeł Cat musi dodać odniesienie do siebie (odległość 0), a następnie obsługiwać duplikację, dodając nadmiarowe dane o węzłach, które są połączone.
Aby wybrać kategorię z sub, po prostu napisz:
SELECT c.* from Category c inner join CatHierarchy ch ON ch.ChildId=c.cat_id
WHERE ch.SuperId = :someSpecifiedRootOfCat
someSpecifiedRootOfCat - jest parametrem do określenia głównego katalogu categoryTHATS ALL!