Maison >base de données >tutoriel mysql >Comment récupérer de manière récursive tous les descendants dans une arborescence MySQL ?
Récurseur d'une structure arborescente dans MySQL
Gérer des données hiérarchiques dans une base de données peut être un défi. Une approche courante consiste à utiliser une relation parent-enfant, comme le démontre la question posée. Bien que l'interrogation des descendants immédiats soit simple, la récupération de tous les descendants peut être plus complexe.
La documentation MySQL suggère plusieurs méthodes pour gérer les données hiérarchiques, notamment les suivantes :
Pour l'exemple donné, en utilisant la méthode Path Enumeration, la requête suivante récupérerait tous les descendants d'un emplacement parent :
WITH RECURSIVE descendant_path AS ( SELECT id, path FROM locations WHERE id IN (SELECT location_id FROM location_parent WHERE parent_id = '$locationid') UNION ALL SELECT l.id, CONCAT(dp.path, ',', l.id) FROM locations l JOIN descendant_path dp ON l.path LIKE CONCAT(dp.path, '%') ) SELECT id FROM descendant_path;
Cette requête utilise un CTE (Common Table Expression) récursif pour parcourir la structure arborescente et créer un chemin pour chaque emplacement descendant. En spécifiant l'emplacement de départ dans la requête initiale, tous les descendants peuvent être récupérés en un seul passage.
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!