Maison >base de données >tutoriel mysql >Comment puis-je trouver tous les nœuds parents d'une entrée spécifique dans une hiérarchie MySQL à l'aide d'une seule requête ?
Dans la gestion de bases de données, la récupération de données hiérarchiques peut souvent nécessiter des requêtes complexes impliquant des algorithmes récursifs. Un tel scénario se produit lorsque nous devons extraire tous les nœuds parents d'une entrée donnée dans un tableau hiérarchique comme celui présenté ci-dessus.
Considérez le tableau fourni avec une hiérarchie d'éléments de menu , où chaque nœud a un ID, un titre et un ID parent. Notre objectif est de récupérer tous les nœuds parents de l'entrée portant le titre "Catégories" à l'aide d'une seule requête MySQL.
Nous pouvons utiliser une requête récursive pour parcourir la table et accumuler les nœuds parents à chaque niveau. La requête suivante accomplit cela :
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;
L'exécution de la requête produira la sortie souhaitée :
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 |
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!