Pokud se ptáte na otázku "Existují v mysql rekurzivní dotazy?" odpovězte "NE".
Ale existuje velmi dobrý přístup, jak to zvládnout.
Vytvořte pomocnou tabulku (říká CatHierarchy)
CatHierarchy:
SuperId, ChildId, Distance
------------------------------
1 1 0
1 2 1
2 2 0
Tato redundantní data umožňují snadno v 1 dotazu vybrat libovolnou hierarchii a ve 2 insert podporovat libovolnou hierarchii (vymazání se také provádí v 1 dotazu pomocí integrity kaskády mazání).
Co to tedy znamená? Všechny cesty sledujete v hierarchii. Každý uzel Cat musí přidat odkaz na sebe (vzdálenost 0), poté podporovat duplikaci přidáním redundantních dat o propojených uzlech.
Chcete-li vybrat kategorii s podřízeným, stačí napsat:
SELECT c.* from Category c inner join CatHierarchy ch ON ch.ChildId=c.cat_id
WHERE ch.SuperId = :someSpecifiedRootOfCat
someSpecifiedRootOfCat - je parametr, který specifikuje kořen kategorieTHATS ALL!