Maison >base de données >tutoriel mysql >Comment puis-je trouver tous les ancêtres d'un nœud dans une table hiérarchique MySQL à l'aide d'une seule requête ?
Rechercher tous les parents dans une table MySQL avec une seule requête utilisant un CTE récursif
Dans une base de données à structure hiérarchique, identifier les parents d'un enregistrement spécifique peut être une tâche complexe. Dans MySQL, ce défi peut être résolu efficacement à l'aide d'une expression de table commune récursive (CTE). Explorons l'énoncé du problème et sa solution.
Énoncé du problème :
Étant donné une table MySQL avec une structure hiérarchique (telle que celle du schéma fourni), où chaque ligne représente un nœud avec un ID, un titre, un ID parent et d'autres informations pertinentes, la tâche consiste à récupérer tous les ancêtres (parents) d'un nœud particulier dans la hiérarchie avec un seul requête.
Solution :
La solution fournie exploite un CTE récursif pour parcourir la hiérarchie et identifier les parents d'un nœud spécifié par son ID. La requête suivante illustre l'approche :
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;
Explication de la requête :
Cette requête récupère efficacement tous les parents du nœud spécifié avec une seule instruction SQL, fournissant une solution pratique et performante pour naviguer dans les données hiérarchiques dans MySQL.
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!