Das Modell verstehen
Die von Ihnen angegebene Tabellenstruktur stellt eine hierarchische Beziehung dar über die Felder site_Id und parent_Id. Jede Zeile in der Tabelle entspricht einer Site, wobei parent_Id auf die ID der übergeordneten Site verweist. Das Ziel besteht darin, alle untergeordneten Elemente einer bestimmten Site-ID effizient abzurufen.
Einschränkungen bei der aktuellen Methode
Ihr aktueller Ansatz umfasst mehrere Abfragen in einer Schleife, was ineffizient sein kann . Um dies zu optimieren, erkunden wir alternative Lösungen.
Rekursive Abfragen mit PostgreSQL
Wenn Sie die Möglichkeit haben, eine Datenbank zu verwenden, die rekursive Abfragen unterstützt, wie z. B. PostgreSQL, sind Sie kann einen rekursiven CTE (Common Table Expression) verwenden, um die Hierarchie in einer einzelnen Abfrage zu durchlaufen. Zum Beispiel:
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;
Optimierte Datenmodelle
Wenn Sie das Datenmodell ändern können, sollten Sie die Verwendung eines Datenmodells in Betracht ziehen, das speziell für hierarchische Daten entwickelt wurde, wie zum Beispiel:
Storing Root ID
Alternativ können Sie der Tabelle eine Spalte „root_Id“ hinzufügen, um den höchsten Vorfahren für jede Site zu identifizieren. Dies ermöglicht das effiziente Abrufen ganzer Bäume mit einer einzigen Abfrage:
SELECT * FROM site WHERE root_Id = <input_root_id>;
Das obige ist der detaillierte Inhalt vonWie kann man alle untergeordneten Sites in einer hierarchischen Datenbank effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!