Si vous demandez "Y a-t-il dans mysql des requêtes récursives?" répondez "NON".
Mais il existe une très bonne approche pour le gérer.
Créer une table d'assistance (en disant CatHierarchy)
CatHierarchy:
SuperId, ChildId, Distance
------------------------------
1 1 0
1 2 1
2 2 0
Ces données redondantes permettent facilement dans 1 requête de sélectionner n'importe quelle hiérarchie, et dans 2 insertions de prendre en charge n'importe quelle hiérarchie (suppression également effectuée dans 1 requête à l'aide de l'intégrité de la cascade de suppression).
Qu'est-ce que cela signifie. Vous suivez tous les chemins dans la hiérarchie. Chaque nœud de Cat doit ajouter une référence à lui-même (distance 0), puis prendre en charge la duplication en ajoutant des données redondantes sur les nœuds liés.
Pour sélectionner une catégorie avec sous, écrivez simplement :
SELECT c.* from Category c inner join CatHierarchy ch ON ch.ChildId=c.cat_id
WHERE ch.SuperId = :someSpecifiedRootOfCat
someSpecifiedRootOfCat - est un paramètre pour spécifier la racine de la catégorie C'EST TOUT !