Maison >base de données >tutoriel mysql >Comment créer de manière récursive une arborescence à partir de données hiérarchiques MySQL ?

Comment créer de manière récursive une arborescence à partir de données hiérarchiques MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-08 15:57:09221parcourir

How to Recursively Build a Tree Structure from MySQL Hierarchical Data?

Comment récupérer de manière récursive des lignes MySQL pour créer un arbre

Problème :

Traverser une structure hiérarchique, telle qu'un table de nomenclature, nécessite une méthode pour récupérer de manière récursive les lignes afin de créer une représentation arborescente imbriquée. Cependant, les requêtes SQL traditionnelles sont limitées dans leur capacité à gérer la récursion.

Réponse :

En 2011, une question a été publiée sur DBA StackExchange cherchant une solution MySQL pour l'arborescence traversée. La réponse a fourni un ensemble de procédures stockées :

  • GetParentIDByID : Récupère l'ID parent d'un ID donné.
  • GetAncestry : Renvoie tous les ancêtres du hiérarchie.
  • GetFamilyTree : Génère l'intégralité de l'arbre généalogique pour un élément donné.

Implémentation :

Appel GetFamilyTree(item_id) pour récupérer l'arbre généalogique d'un élément spécifique. Cette procédure stockée trouvera récursivement le parent et tous les ancêtres, renvoyant les résultats sous forme d'arborescence en couches.

Exemple :

CREATE PROCEDURE GetFamilyTree(
   IN item_id INT
)
BEGIN

   SELECT ... # Perform recursive tree traversal

END;

Utilisation :

CALL GetFamilyTree(1);

Cela récupérera l'intégralité de l'arbre généalogique de l'élément 1 et le présentera dans un format imbriqué. format.

Avantages :

  • Gère efficacement la récupération de données hiérarchiques sans avoir besoin d'un traitement par lots inefficace.
  • Fournit un moyen personnalisable de parcourir l'arborescence en spécifiant le nœud de départ.
  • Permet la génération de structures arborescentes complexes et dynamiques basées sur une base de données 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn