Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment récupérer des catégories et des sous-catégories en une seule requête en SQL ? (mysql)

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 !