Als u vraagt over "Is er in mysql recursieve vragen?" antwoord "NEE".
Maar er is een zeer goede aanpak om ermee om te gaan.
Maak een helpertabel (zeg CatHierarchy)
CatHierarchy:
SuperId, ChildId, Distance
------------------------------
1 1 0
1 2 1
2 2 0
Met deze redundante gegevens kan eenvoudig in 1 query elke hiërarchie worden geselecteerd en in 2 inserts elke hiërarchie worden ondersteund (verwijdering wordt ook in 1 query uitgevoerd met behulp van cascade-integriteit verwijderen).
Dus wat betekent dit. U volgt alle paden in hiërarchie. Elk knooppunt van Cat moet een verwijzing naar zichzelf toevoegen (afstand 0), en vervolgens duplicatie ondersteunen door redundante gegevens over knooppunten toe te voegen.
Om een categorie met sub te selecteren, schrijf je gewoon:
SELECT c.* from Category c inner join CatHierarchy ch ON ch.ChildId=c.cat_id
WHERE ch.SuperId = :someSpecifiedRootOfCat
someSpecifiedRootOfCat - is een parameter om de hoofdmap van categorie te specificeren DAT ALLES!