Recherche de parents dans une table MySQL avec récursion
Dans un schéma de base de données, l'établissement de relations hiérarchiques est courant. Lors de l'interrogation de ces données, il devient nécessaire de récupérer non seulement des enregistrements spécifiques mais également leurs connexions hiérarchiques. Cet article abordera la tâche consistant à trouver tous les parents d'un enregistrement dans une table MySQL à l'aide d'une seule requête.
Énoncé du problème
Étant donné une table avec l'ID de colonnes, TITLE , CONTROLLER, METHOD et PARENT_ID, recherchez tous les parents d'un enregistrement dont le TITLE est "Catégories" à l'aide d'un seul code SQL. requête.
Sortie souhaitée
La sortie doit afficher ce qui suit colonnes :
et devrait récupérer le records :
id | title | controller | method | url | parent_id |
---|---|---|---|---|---|
3 | Modules | admin | modules | (NULL) | 0 |
17 | User Modules | modules | user_module | (NULL) | 3 |
31 | Categories | categories | category | (NULL) | 17 |
Solution
Pour obtenir le résultat souhaité, nous devons exploiter les capacités de requêtes récursives de MySQL. Voici la requête SQL que nous pouvons utiliser :
SELECT T2.id, T2.title,T2.controller,T2.method,T2.url FROM ( SELECT @r AS _id, (SELECT @r := parent_id FROM menu WHERE id = _id) AS parent_id, @l := @l + 1 AS lvl FROM (SELECT @r := 31, @l := 0) vars, menu m WHERE @r <> 0) T1 JOIN menu T2 ON T1._id = T2.id ORDER BY T1.lvl DESC;
Décomposons cette requête :
En exécutant cette requête, nous peut récupérer tous les parents de l'enregistrement avec TITLE comme "Catégories" en un seul appel à la base de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!