理解模型
您提供的表結構代表分層關係透過site_Id 和與關係Parent_Id 欄位。表中的每一行對應一個站點,parent_Id 引用其父站點的 ID。目標是高效檢索給定網站 ID 的所有子網站。
目前方法的限制
您目前的方法涉及循環中的多個查詢,這可能效率低下。為了優化這一點,讓我們探索替代解決方案。
使用PostgreSQL 進行遞迴查詢
如果您可以選擇使用支援遞迴查詢的資料庫,例如PostgreSQL,您可以使用遞歸CTE(公用表表達式)在單一查詢中遍歷層次結構。例如:
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;
最佳化的資料模型
如果可以修改資料模型,請考慮採用專為分層資料設計的資料模型,例如:
儲存根ID
或者,您可以在表中新增root_Id 資料列來識別每個網站的最高祖先。這允許使用單一查詢有效檢索整個樹:
SELECT * FROM site WHERE root_Id = <input_root_id>;
以上是如何有效率地檢索分層資料庫中的所有子站點?的詳細內容。更多資訊請關注PHP中文網其他相關文章!