Maison >base de données >tutoriel mysql >Comment interroger des données hiérarchiques dans MySQL sans CONNECT BY PRIOR ?

Comment interroger des données hiérarchiques dans MySQL sans CONNECT BY PRIOR ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-06 13:09:421072parcourir

How to Query Hierarchical Data in MySQL Without CONNECT BY PRIOR?

Interrogation de données hiérarchiques dans MySQL sans "Connect By Prior"

Dans MySQL, malgré l'absence d'une clause explicite "Connect By Prior" , il est possible de récupérer des données hiérarchiques en utilisant une combinaison de techniques récursives.

Traversée récursive Algorithme

Pour parcourir de manière récursive une table hiérarchique comme tb_Tree, suivez ces étapes :

  1. Sélectionnez les lignes où ParentId correspond au nœud racine souhaité.
  2. Collectez le Valeurs d'identification des lignes sélectionnées.
  3. Répétez les étapes 1 et 2 pour chacune Id dans la liste collectée.

Ce processus récursif se poursuit jusqu'à ce que tous les nœuds feuilles soient identifiés.

Approche basée sur la profondeur

Si vous connaître la profondeur maximale de l'arborescence, vous pouvez joindre la table à elle-même à plusieurs reprises pour atteindre le niveau le plus profond, puis filtrer tout NULL restant valeurs.

Représentation d'ensemble imbriqué

Vous pouvez également modifier la structure du tableau pour utiliser une représentation d'ensemble imbriqué. Cela implique l'ajout de colonnes supplémentaires pour représenter les limites gauche et droite de chaque nœud dans la hiérarchie.

Exemple de requête pour récupérer les enfants

Pour récupérer tous les enfants d'un nœud spécifique avec Id égal à X, vous utiliseriez la requête suivante :

SELECT * FROM tb_Tree WHERE ParentId IN (
  SELECT Id FROM tb_Tree WHERE ParentId = X
  UNION ALL
  /* Recursive traversal of children */
  SELECT Id FROM tb_Tree WHERE Id IN (
    SELECT Id FROM tb_Tree WHERE ParentId = X
  )
);

Cette requête parcourt récursivement la hiérarchie, collectant toutes les valeurs d'Id associé aux nœuds enfants.

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