Maison >base de données >tutoriel mysql >Comment récupérer de manière récursive des dossiers enfants hiérarchiques dans MySQL avec différents niveaux ?

Comment récupérer de manière récursive des dossiers enfants hiérarchiques dans MySQL avec différents niveaux ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-01 17:11:30533parcourir

How to Recursively Retrieve Hierarchical Child Folders in MySQL with Varying Levels?

Requête MySQL récursive pour récupérer des dossiers enfants hiérarchiques avec différents niveaux

Lors de la gestion de structures de données hiérarchiques, telles que des dossiers imbriqués ou des relations arborescentes , retrouver tous les enfants et leurs descendants potentiels peut être un défi. Cet article présente une requête MySQL qui répond efficacement à ce besoin en parcourant de manière récursive une table hiérarchique « Dossier ».

La table « Dossier » utilisée dans cet exemple comporte trois colonnes : « idFolder », « FolderName » et « idFolderParent', qui représente la relation parent-enfant. L'objectif est de récupérer tous les dossiers enfants, y compris les dossiers sous-enfants, pour un « idFolder » donné en une seule requête.

L'un des défis rencontrés par les solutions précédentes était de gérer les cas où les dossiers parents n'étaient pas enregistrés dans un emplacement spécifique. commande dans la base de données. Pour pallier à cela, nous proposons une requête qui s'appuie sur la fonction GROUP_CONCAT() et une variable personnalisée.

La requête :

SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
  SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder
  WHERE FIND_IN_SET(idFolderParent, @pv)) AS lv FROM Folder
  JOIN (SELECT @pv:=5) tmp
) a;

Cette requête fonctionne de la manière suivante :

  1. Il initialise une variable personnalisée @pv avec le 'idFolder' du dossier cible (dans ce cas, 5).
  2. La requête interne recherche de manière récursive toutes les valeurs enfants 'idFolder' qui ont @pv en tant que parent.
  3. Les résultats sont regroupés et concaténés, séparés par des virgules, pour former une chaîne contenant les valeurs 'idFolder' de tous les dossiers enfants et sous-enfants.

Cette approche garantit que tous les dossiers enfants et sous-enfants sont récupérés quelle que soit leur position dans la structure hiérarchique, fournissant une liste complète pour la valeur 'idFolder' donnée.

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