jQuery 可嵌套 - 使用 PHP 嵌套集模型保存到 MySQL

jQuery nestable - save to MySQL with PHP nested set model

我现在使用 Nestable 插件用于 eshop 类别 http://dbushell.github.io/Nestable/

我使用 Nested Set model.

将数据保存到具有列 parent_id, order, level 的 MySQL 数据库

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

能否请您举例说明如何将数据保存到数据库中,或者是否有任何包装器可以让我使用 嵌套集模型插入新项目、更新所有树和删除一个项目?


我找到了 Baobab 库 http://www.sideralis.org/baobab/,它做这些操作,但是它很重。

这里...

要插入:

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