2015-04-12 71 views
0

我不知道如何解決這個案例需要一些指導我有一個場景,我必須update a star列字段的根節點添加到目前爲止的每個子條目我已經做到了這一點,它的更新直接鏈接節點的star列不完整的路徑一樣,如果ArootB C & Dchildren然後Astar列得到更新,現在如果CBD增加低於他們的東西A星柱沒有變更新,我有關於觸發器和SQL的知識較少,我卡住了我搜索了很多,但沒有找到解決方案這裏是SQL的方法是做到目前爲止所有這一切。更新一個星列直到根節點添加新條目

DELIMITER @@ 
DROP PROCEDURE p_prefix_nodes_add_new_paths_after_insert @@ 
CREATE PROCEDURE cvs.p_prefix_nodes_add_new_paths_after_insert 
(
    param_node_new_id INT UNSIGNED, 
    param_node_parent_id INT UNSIGNED 
) 
BEGIN 

INSERT INTO `prefix_nodes_paths` (
    `ancestor_id`, 
    `descendant_id`, 
    `path_length` 
) 
SELECT 
    `ancestor_id`, 
    `param_node_new_id`, 
    `path_length` + 1 
FROM 
    `prefix_nodes_paths` 
WHERE `descendant_id` = `param_node_parent_id` 
UNION 
ALL 
SELECT 
    `param_node_new_id`, 
    `param_node_new_id`, 
    0 ; 
    Update prefix_nodes_paths 
    Set stars=stars+1 
    where ancestor_id=param_node_parent_id; 
END @@ 
DELIMITER ; 

回答

0

標識的建議你使用nested set model技術存儲在SQL數據庫中的樹狀數據。當您嘗試獲取特定節點的後代或祖先時,您的查詢將變得更加方便,快捷和簡單。

+0

是的,我試過嵌套集合模型,我不知道如何分配左右值到節點,因爲我必須處理一個通用的情況下,我不知道用戶的數量,我已經實現了閉包方法,我認爲它很容易實現其他嵌套集模型,鄰接列表和路徑枚舉模型 – Wiz

+0

您使用什麼編程語言?你有沒有考慮過使用一些已經編寫過的嵌套集合模型庫?通常情況下,使用一個庫比自己實現這個東西更簡單。無論您將擁有多少用戶,這都無關緊要 - 有很多情況下需要在更新過程中使用非常簡單的計算來重新生成左/右值。 – vitalikaz

+0

我在php中這樣做,並且我在一些圖書館中找到了它,但是我不知道如何使用它們,如果您有任何有用的信息,請讓我知道它,並且我也是web開發領域的新成員,所以我不知道真的很多東西... – Wiz