Comprendre le modèle
La structure de table que vous avez fournie représente une relation hiérarchique via les champs site_Id et parent_Id. Chaque ligne du tableau correspond à un site, parent_Id faisant référence à l'ID de son site parent. L'objectif est de récupérer efficacement tous les enfants d'un ID de site donné.
Limitations de la méthode actuelle
Votre approche actuelle implique plusieurs requêtes dans une boucle, ce qui peut être inefficace . Pour optimiser cela, explorons des solutions alternatives.
Requêtes récursives avec PostgreSQL
Si vous avez la possibilité d'utiliser une base de données prenant en charge les requêtes récursives, telle que PostgreSQL, vous peut utiliser un CTE (Common Table Expression) récursif pour parcourir la hiérarchie en une seule requête. Par exemple :
WITH RECURSIVE ChildSites AS ( SELECT site_Id, parent_Id FROM site WHERE parent_Id = <input_site_id> UNION ALL SELECT s.site_Id, s.parent_Id FROM site AS s JOIN ChildSites AS cs ON s.parent_Id = cs.site_Id ) SELECT * FROM ChildSites;
Modèles de données optimisés
Si vous pouvez modifier le modèle de données, envisagez d'utiliser un modèle de données spécifiquement conçu pour les données hiérarchiques, tel que :
Stockage de la racine ID
Vous pouvez également ajouter une colonne root_Id au tableau pour identifier l'ancêtre le plus élevé de chaque site. Cela permet une récupération efficace d'arbres entiers à l'aide d'une seule requête :
SELECT * FROM site WHERE root_Id = <input_root_id>;
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!