Hvis du spørger om "Er der i mysql rekursive forespørgsler?" svar "NEJ".
Men der er en meget god tilgang til at håndtere det.
Opret hjælpetabel (og siger CatHierarchy)
CatHierarchy:
SuperId, ChildId, Distance
------------------------------
1 1 0
1 2 1
2 2 0
Disse redundante data gør det nemt i 1 forespørgsel at vælge ethvert hierarki, og i 2 indsættelser understøtter ethvert hierarki (sletning udføres også i 1 forespørgsel ved hjælp af sletning af kaskadeintegritet).
Så hvad betyder dette. Du sporer alle stier i hierarki. Hver node af Cat skal tilføje reference til sig selv (afstand 0), og derefter understøtte duplikering ved at tilføje redundante data om noder er linket.
For at vælge kategori med under skal du bare skrive:
SELECT c.* from Category c inner join CatHierarchy ch ON ch.ChildId=c.cat_id
WHERE ch.SuperId = :someSpecifiedRootOfCat
someSpecifiedRootOfCat - er parameter til at specificere roden af kategorien DET ER ALT!