2016-03-13 99 views
1

我现在用的嵌套插件类商铺http://dbushell.github.io/Nestable/jQuery的嵌套 - 保存到MySQL和PHP嵌套集模型

我保存使用Nested Set modelparent_id, order, level数据到MySQL数据库。

但我想使用嵌套的模型只用列lft, rgt

请你给我的例子,如何将数据保存到数据库或者是有,我可以用它来只需要插入新项目的任何包装,更新所有的树并删除一个项目,使用嵌套集模型


我发现猴面包树库http://www.sideralis.org/baobab/,其执行这些操作,但它是非常沉重的。

回答

1

这里......

要插入:

begin; 
SELECT rgt INTO new_lft FROM tree_map WHERE node_id = parent_id; 
UPDATE tree_map SET rgt = rgt + 2 WHERE rgt >= new_lft; 
UPDATE tree_map SET lft = lft + 2 WHERE lft > new_lft; 
INSERT INTO tree_map (lft, rgt, parent_id) VALUES (new_lft, (new_lft + 1), parent_id); 
commit; 
SELECT LAST_INSERT_ID(); 

删除:

SELECT lft, rgt, (rgt - lft), (rgt - lft + 1), parent_id 
    INTO new_lft, new_rgt, has_leafs, width, superior_parent 
    FROM tree_map WHERE node_id = pnode_id; 

begin; 
DELETE FROM tree_content WHERE node_id = pnode_id; 

IF (has_leafs = 1) THEN 
    DELETE FROM tree_map WHERE lft BETWEEN new_lft AND new_rgt; 
    UPDATE tree_map SET rgt = rgt - width WHERE rgt > new_rgt; 
    UPDATE tree_map SET lft = lft - width WHERE lft > new_rgt; 
ELSE 
    DELETE FROM tree_map WHERE lft = new_lft; 
    UPDATE tree_map SET rgt = rgt - 1, lft = lft - 1, parent_id = superior_parent 
    WHERE lft BETWEEN new_lft AND new_rgt; 
    UPDATE tree_map SET rgt = rgt - 2 WHERE rgt > new_rgt; 
    UPDATE tree_map SET lft = lft - 2 WHERE lft > new_rgt; 
END IF; 
commit; 

你也可能需要使用惊人的存储过程的MySQL,而不:

https://github.com/werc/TreeTraversal/blob/master/sql/r_tree_traversal.sql#L4