Maison > base de données > tutoriel mysql > le corps du texte

Comment parcourir de manière récursive une structure arborescente dans MySQL ?

Barbara Streisand
Libérer: 2024-10-24 04:59:02
original
311 Les gens l'ont consulté

How to Recursively Traverse a Tree Structure in MySQL?

Récurseur d'une structure arborescente dans MySQL

Lorsque vous travaillez avec des données hiérarchiques, il est souvent nécessaire de récupérer les descendants d'un nœud particulier dans l'arborescence structure. Dans le contexte de MySQL, où un emplacement peut se trouver à l'intérieur d'un autre emplacement, la tâche devient plus complexe à mesure que le nombre de niveaux augmente.

La requête PHP/MySQL fournie :

$sql = "SELECT id FROM se_locations_services WHERE parent_locationid IN
( SELECT location_id FROM se_locations_parent WHERE parent_id = '$locationid' )";
Copier après la connexion

efficacement récupère les descendants immédiats d’un emplacement donné.

Cependant, pour récupérer tous les descendants, quelle que soit leur profondeur, une approche récursive est nécessaire. MySQL ne prend pas en charge nativement les requêtes récursives, mais il existe une solution élégante décrite dans l'article complet lié ci-dessous sur mysql.com :

[Gestion des données hiérarchiques dans MySQL](https://www.mysql.com/news -and-events/mysql-perspectives/performance-tuning-json-mysql-for-hierarchical-data/)

Cet article présente diverses approches pour gérer les données hiérarchiques, y compris la possibilité d'utiliser des CTE (Common Expressions de table) pour implémenter la récursion :

WITH RECURSIVE descendants (id, parent_id) AS (
    SELECT id, parent_id FROM locations
    UNION ALL
    SELECT l.id, l.parent_id FROM locations l
    JOIN descendants d ON l.parent_id = d.id
)
SELECT DISTINCT id FROM descendants WHERE parent_id = $locationid;
Copier après la connexion

En employant l'opérateur UNION ALL, le CTE étend de manière itérative la liste des descendants, permettant à MySQL de récupérer la hiérarchie complète à partir d'une seule requête.

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal