Maison >base de données >tutoriel mysql >Comment puis-je interroger efficacement des descendants ou des ancêtres dans une arborescence MySQL sans spécifier de profondeur ?
Requête de structure arborescente dans MySQL : traversée indépendante de la profondeur
L'accès aux données de structure arborescente dans MySQL implique souvent des requêtes récursives ou séquentielles. Cependant, il est possible de récupérer tous les descendants ou ancêtres d'une ligne donnée dans une table arborescente sans spécifier explicitement le niveau de profondeur à l'aide d'une seule requête. Cette technique est connue sous le nom de traversée d'arbre de précommande modifiée.
Méthodologie de requête
Dans une table de structure arborescente avec les colonnes id, data et parent_id, une requête de traversée de précommande modifiée peut être formulé comme suit :
SELECT id, data, parent_id FROM tree_table WHERE id IN ( SELECT id FROM tree_table WHERE ancestry LIKE '%given_id/%' )
Ici, gave_id représente l'ID de la ligne pour laquelle vous souhaitez récupérer des descendants ou ancêtres.
Utilisation et mise en œuvre
La chaîne de requête 'ancestry LIKE '%given_id/%'' filtre les lignes qui ont l'ID donné dans le cadre de leur chemin d'ascendance. . Cela garantit que tous les descendants (ainsi que la ligne donnée) sont renvoyés. Pour récupérer les ancêtres, remplacez simplement '%given_id/%' par '%/given_id/%'.
Par exemple, en PHP avec MySQLi :
$stmt = $mysqli->prepare("SELECT id, data, parent_id FROM tree_table WHERE id IN (SELECT id FROM tree_table WHERE ancestry LIKE '%?/%')");
Informations supplémentaires
L'exemple PHP fourni par Sitepoint (mentionné dans la réponse) offre une illustration complète de cette technique. Pour plus d'informations sur la gestion des structures arborescentes dans SQL, reportez-vous à « Trees and Hierarchies in SQL for Smarties » de Joe Celko.
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!