2015-04-12 73 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