將扁平表高效解析為樹狀結構
簡介
將表示樹形層次結構的扁平表高效轉換為嵌套結構,可以使用多種方法實現。本文探討了一種使用基本數據結構的極簡方案,並考慮了用於優化樹形表示的替代數據庫存儲方法。
解析的極簡方法
假設一個表包含以下數據:
Id | Name | ParentId | Order |
---|---|---|---|
1 | 'Node 1' | 0 | 10 |
2 | 'Node 1.1' | 1 | 10 |
3 | 'Node 2' | 0 | 20 |
4 | 'Node 1.1.1' | 2 | 10 |
5 | 'Node 2.1' | 3 | 10 |
6 | 'Node 1.2' | 1 | 20 |
將此表解析為樹形結構:
-
創建字典:將每個節點的 Id 映射到其對應的數據。
-
識別根節點:根節點是沒有 ParentId 的節點。
-
構建樹:通過遞歸創建子節點並將其添加到相應的父節點來構建樹。
- 對於每個非根節點,使用其 ParentId 在字典中查找其父節點。
- 將節點添加為父節點的子節點。
-
排序子節點:根據子節點的 Order 對每個節點的子節點進行排序。
此方法的偽代碼:
<code>创建字典(table) def 获取根节点(): 根节点 = [] 对于 id, 节点 in 字典.items(): 如果 节点['ParentId'] == 0: 根节点.append(节点) 返回 根节点 def 构建树(根节点): 对于 根节点 in 根节点: 子节点 = [] 对于 id, 节点 in 字典.items(): 如果 节点['ParentId'] == 根节点['Id']: 子节点.append(节点) 子节点.sort(key=lambda x: x['Order']) 根节点['children'] = 子节点 构建树(子节点) def 打印树(根节点): 对于 根节点 in 根节点: 打印(根节点['Name']) 如果 'children' in 根节点: 打印树(根节点['children'])</code>
SQL 中樹形結構的替代存儲方法
閉包表:
在關係數據庫中存儲樹形結構的另一種方法是使用閉包表,其中包含一個單獨的表,該表包含祖先節點 ID 和後代節點 ID 列。這允許輕鬆查詢關係。
使用閉包表的查詢:
<code>SELECT f.name, GROUP_CONCAT(b.ancestor_id order by b.path_length desc) AS breadcrumbs FROM FlatTable f JOIN ClosureTable a ON (f.id = a.descendant_id) JOIN ClosureTable b ON (b.descendant_id = a.descendant_id) WHERE a.ancestor_id = 1 GROUP BY a.descendant_id ORDER BY f.name</code>
嵌套集:
嵌套集涉及在單個表中存儲樹中每個節點的位置信息。此方法允許對給定級別或子樹中的節點進行高效的基於範圍的查詢。
結論
雖然提供的示例使用扁平表作為輸入,但所提出的方法非常適用於不同的數據結構和存儲方法。通過使用適當的技術,您可以高效地解析樹形層次結構,並確保數據完整性和易於訪問。
以上是如何有效地將平桌放入嵌套的樹結構中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用MySQL的Alter Table語句修改表,包括添加/刪除列,重命名表/列以及更改列數據類型。

文章討論了為MySQL配置SSL/TLS加密,包括證書生成和驗證。主要問題是使用自簽名證書的安全含義。[角色計數:159]

文章討論了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比較了它們對初學者和高級用戶的功能和適合性。[159個字符]

本文討論了使用Drop Table語句在MySQL中放下表,並強調了預防措施和風險。它強調,沒有備份,該動作是不可逆轉的,詳細介紹了恢復方法和潛在的生產環境危害。

本文討論了在PostgreSQL,MySQL和MongoDB等各個數據庫中的JSON列上創建索引,以增強查詢性能。它解釋了索引特定的JSON路徑的語法和好處,並列出了支持的數據庫系統。

文章討論了使用準備好的語句,輸入驗證和強密碼策略確保針對SQL注入和蠻力攻擊的MySQL。(159個字符)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver CS6
視覺化網頁開發工具

WebStorm Mac版
好用的JavaScript開發工具