Requêtes récursives pour la récupération de données hiérarchiques dans MySQL
Lorsque vous traitez des données hiérarchiques dans une base de données, il devient souvent nécessaire de récupérer des informations sur plusieurs niveaux de relations. Dans MySQL, les requêtes récursives offrent une solution puissante pour cette tâche.
Considérons l'exemple suivant : Imaginez un simple arbre généalogique représenté dans un tableau à deux colonnes : "a" et "b", où "a" représente le parent et «b» désigne l'enfant. Si nous voulons retrouver tous les ancêtres (parents, grands-parents, etc.) d'un individu donné, comment pourrions-nous l'aborder ?
Dans MySQL, nous pouvons exploiter des requêtes récursives pour parcourir la structure arborescente et récupérer les ancêtres d'un nœud spécifique. Disons que nous voulons trouver les ancêtres de l'individu avec une valeur « b » de 5. La requête suivante accomplirait cela :
SELECT @id := (SELECT senderid FROM mytable WHERE receiverid = @id) AS person FROM (SELECT @id := 5) vars STRAIGHT_JOIN mytable WHERE @id IS NOT NULL
Cette requête utilise une sous-requête récursive pour établir une relation entre le « a » (senderid) et 'b' (receiverid). La requête interne initialise la variable @id au nœud souhaité (5) puis utilise la requête externe pour joindre les lignes suivantes de manière récursive jusqu'à ce qu'il n'y ait plus d'ancêtres.
En exécutant cette requête, nous obtiendrions le résultat suivant :
person |
---|
1 |
2 |
3 |
4 |
Ce résultat fournit la hiérarchie complète menant au nœud avec une valeur 'b' de 5, y compris le nœud initial lui-même et ses parents, grands-parents et bientôt. Ainsi, les requêtes récursives dans MySQL constituent un outil puissant pour parcourir les données hiérarchiques et récupérer des informations détaillées sur plusieurs niveaux de relations.
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!