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. 對孩子徘徊在父親
- 2. 父親孩子的Css錯誤
- 3. SQL查詢父親的孩子關係
- 4. 顯示孩子在模型父 - Rails的
- 5. 父母和孩子的尺寸計算
- 6. MySQL的:計數的孩子,讓父行
- 7. 父親孩子和銷售彙總
- 8. AS3 - 孩子使用startDrag移動父親
- 9. CSS父親懸停保持孩子不過濾灰度
- 10. 在CSS中選擇一個孩子的父親
- 11. 如何從父母送模型孩子
- 12. 快速:引用孩子的路由定義中的父親
- 13. Clojure的地圖轉換(孩子父親在樹上)
- 14. CSS中的變量z-index父親和訂單孩子
- 15. 有孩子的數組 - 以父親 - 孩子等級的形式顯示
- 16. 孩子正在計算屏幕上的100%寬度,而不是父母
- 17. 在Rails中只能有一個孩子的父模型?
- 18. 用樹模型計算相關記錄(全深度)
- 19. 雙親父母在竹後觸發小孩計劃?
- 20. 如何讓絕對定位的父親的孩子擴大其寬度?
- 21. Grails一對多保存孩子不刷新父親子集
- 22. 顏色深度計算
- 23. 絕對孩子的相對父親的位置
- 24. XML和LINQ問題找到父親的孩子
- 25. 加入JoinQueryOver:獲取偉大的孩子,認識父親
- 26. jQuery嵌套ul與李的父親孩子,顯示隱藏
- 27. 使用c循環父親的孩子組合xml#
- 28. 計算受限深度樹中子樹的數量
- 29. 計算OWL本體中子類的深度
- 30. 在jQuery中選擇最深的孩子
我剛纔看到您的其他問題回覆:在嵌套集模型的移動節點,它看起來就像你被賦予了一些非常矛盾的答案,所以我能理解你的挫折感:-)移動嵌套集模型的節點其實非常簡單(儘管取決於你的桌子尺寸,它可能很昂貴)。如果您對此感興趣,請告訴我,我可以在答案中加上解釋。 – ChssPly76 2009-07-28 19:16:01
哈哈沒錯,我對此感到非常沮喪。我發現一個星期前我認爲應該可以工作的解決方案,但是還沒有實施。但是對於我的目的而言,嵌套集合效果不佳,因爲許多不同的用戶可能會有很多每日更新,這意味着表格中有許多行。 因此,我會給這個鄰接表模型一個鏡頭,它可以安全地移動一個節點。 *豎起大拇指* – Ivar 2009-07-28 19:50:11
祝您好運。我已經更新了我的答案以反映鄰接列表模型。 – ChssPly76 2009-07-28 20:22:06