Ако питате за "Има ли в mysql рекурсивни заявки?" отговорете "НЕ".
Но има много добър подход за справяне.
Създайте помощна таблица (като казва CatHierarchy)
CatHierarchy:
SuperId, ChildId, Distance
------------------------------
1 1 0
1 2 1
2 2 0
Тези излишни данни позволяват лесно в 1 заявка да се избере всяка йерархия, а в 2 вмъкване поддържа всяка йерархия (изтриването също се извършва в 1 заявка с помощта на изтриване на каскадна цялост).
И така, какво означава това. Проследявате всички пътища в йерархия. Всеки възел на Cat трябва да добави препратка към себе си (разстояние 0), след което да поддържа дублиране чрез добавяне на излишни данни за свързаните възли.
За да изберете категория с под, просто напишете:
SELECT c.* from Category c inner join CatHierarchy ch ON ch.ChildId=c.cat_id
WHERE ch.SuperId = :someSpecifiedRootOfCat
someSpecifiedRootOfCat - е параметър за определяне на корен на категория ТОВА ВСИЧКО!