2
A
回答
1
這可能是一個老問題,但我只想讓其他人知道我在幾個月前找到了解決方案。我最近在這裏寫了:http://en.someotherdeveloper.com/articles/adjacency-list-model-with-depth-calculation/
1
這取決於您在數據庫中的層次結構的實際實施。如果您使用嵌套集模型(http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/),則可以通過單個選擇檢索完整的父到子路徑。
更新:好吧,既然你要用鄰接表模型,我建議將節點級別存儲在表中。它不僅將讓你在一個查詢節點的深度,但它也可以讓您檢索到該節點的整個路徑在一個查詢(儘管該查詢必須動態生成):
SELECT n1.name AS lvl1, n2.name as lvl2, n3.name as lvl3, ..., nN.name as lvlN
FROM nodes AS n1
JOIN nodes AS n2 ON n2.parent_id = n1.id
JOIN nodes AS n3 ON n3.parent_id = n2.id
...
JOIN nodes AS nN ON nN.parent_id = n(N-1).id
WHERE nN.id = myChildNode;
由於你知道你的節點在N層上,不需要左連接,並且在id/parent_id上給出適當的索引時,這應該是相當快的。
這種方法的缺點是你必須在節點移動過程中更新節點級別,但這應該是相當直接和快速的,因爲你只會爲節點本身和它的子節點執行它 - 而不是大部分表,就像你使用嵌套集合一樣。
0
如果你想只是複製粘貼這裏是我的例子。 我有ID和PARENT_ID文件的表項目。
DELIMITER $$
DROP FUNCTION IF EXISTS `getDepth` $$
CREATE FUNCTION `getDepth` (project_id INT) RETURNS int
BEGIN
DECLARE depth INT;
SET depth=1;
WHILE project_id > 0 DO
SELECT IFNULL(parent_id,-1)
INTO project_id
FROM (SELECT parent_id FROM Projects WHERE id = project_id) t;
IF project_id > 0 THEN
SET depth = depth + 1;
END IF;
END WHILE;
RETURN depth;
END $$
DELIMITER ;
相關問題
- 1. AngularDart:孩子不適合寬度父親
- 2. Tree,TreeNode父親和孩子
- 3. 從mysql的同一張表中選擇父親的孩子
- 4. 對孩子徘徊在父親
- 5. SQL查詢父親的孩子關係
- 6. 父親孩子的Css錯誤
- 7. SQL:每個父親的平均孩子
- 8. 顯示孩子在模型父 - Rails的
- 9. 父母和孩子的尺寸計算
- 10. MySQL的:計數的孩子,讓父行
- 11. AS3 - 孩子使用startDrag移動父親
- 12. 父親孩子和銷售彙總
- 13. CSS父親懸停保持孩子不過濾灰度
- 14. 數據庫設計刪除父和他的孩子在嵌套親子情況
- 15. Nhibernate刪除父模型的孩子 - MVC3
- 16. 在CSS中選擇一個孩子的父親
- 17. OpenGL深度計算
- 18. XQuery - 計算父親的前同胞
- 19. 如何在JavaScript中表示2個父親孩子下拉?
- 20. 如何從父母送模型孩子
- 21. 快速:引用孩子的路由定義中的父親
- 22. CakePHP的模型協會 - 找到父模型的其他孩子
- 23. 如何使用SQL計算父親器官統計信息
- 24. CSS中的變量z-index父親和訂單孩子
- 25. Clojure的地圖轉換(孩子父親在樹上)
- 26. 有孩子的數組 - 以父親 - 孩子等級的形式顯示
- 27. 孩子正在計算屏幕上的100%寬度,而不是父母
- 28. 在Rails中只能有一個孩子的父模型?
- 29. excel公式函數 - 父子單元計算從它的孩子
- 30. 用樹模型計算相關記錄(全深度)
我剛纔看到您的其他問題回覆:在嵌套集模型的移動節點,它看起來就像你被賦予了一些非常矛盾的答案,所以我能理解你的挫折感:-)移動嵌套集模型的節點其實非常簡單(儘管取決於你的桌子尺寸,它可能很昂貴)。如果您對此感興趣,請告訴我,我可以在答案中加上解釋。 – ChssPly76 2009-07-28 19:16:01
哈哈沒錯,我對此感到非常沮喪。我發現一個星期前我認爲應該可以工作的解決方案,但是還沒有實施。但是對於我的目的而言,嵌套集合效果不佳,因爲許多不同的用戶可能會有很多每日更新,這意味着表格中有許多行。 因此,我會給這個鄰接表模型一個鏡頭,它可以安全地移動一個節點。 *豎起大拇指* – Ivar 2009-07-28 19:50:11
祝您好運。我已經更新了我的答案以反映鄰接列表模型。 – ChssPly76 2009-07-28 20:22:06