Requêtes hiérarchiques dans MySQL : récupération des relations avec les ancêtres
Pour gérer efficacement les données hiérarchiques, MySQL propose de puissantes requêtes récursives qui peuvent naviguer dans les relations à n'importe quelle profondeur . Cela devient particulièrement utile lorsque vous devez extraire des relations ancestrales.
Considérez la structure relationnelle suivante, où « a » représente le champ parent et « b » représente le champ enfant :
| a | b | ----------- | 1 | 2 | | 2 | 3 | | 3 | 4 | | 4 | 5 | | 3 | 6 | | 4 | 7 |
Problème : Étant donné la valeur d'un champ enfant (par exemple, 5), déterminez tous ses champs parents, ses grands-parents, etc., quelle que soit la profondeur du champ hiérarchie.
Solution :
MySQL fournit une expression de table commune (CTE) récursive qui vous permet de naviguer efficacement dans les relations hiérarchiques :
WITH RECURSIVE Ancestors AS ( SELECT * FROM mytable WHERE b = 5 UNION ALL SELECT t1.* FROM mytable t1 JOIN Ancestors t2 ON t1.a = t2.b ) SELECT a, b FROM Ancestors;
Cette requête crée un CTE récursif nommé « Ancêtres » qui identifie de manière itérative les parents de chaque champ enfant dans la hiérarchie. Le CTE commence par sélectionner le champ enfant avec la valeur 5 (c'est-à-dire 5). Il joint ensuite « matable » à lui-même en utilisant les champs « a » (parent) et « b » (enfant). Ce processus récursif se poursuit jusqu'à ce qu'il n'y ait plus de champs parents à récupérer.
L'instruction SELECT finale extrait à la fois les champs « a » (parent) et « b » (enfant) du CTE « Ancêtres », fournissant ainsi le relation hiérarchique souhaitée.
Une fois exécutée, cette requête renvoie les résultats suivants :
a | b ----------- 1 | 2 2 | 3 3 | 4 4 | 5
Ainsi, elle récupère avec succès les parents, grands-parents et autres ancêtres de la valeur du champ enfant fourni.
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!