树 预排序遍历 无限分类( mysql写成存储过程加子节点)删子节点

本文介绍如何使用SQL语句与存储过程来高效地进行节点的添加与删除操作,包括创建节点、更新节点范围、插入新节点以及删除指定节点及其子节点的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初始结构


Food初始表


CREATE TABLE IF NOT EXISTS `food` (
  `id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(10) DEFAULT NULL,
  `lft` int(100) DEFAULT NULL,
  `rgt` int(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- 导出表中的数据 `food`
--

INSERT INTO `food` (`id`, `name`, `lft`, `rgt`) VALUES
(0, 'Food', 1, 18),
(1, 'Fruit', 2, 11),
(3, 'Red', 3, 6),
(4, 'Cherry', 4, 5),
(5, 'Yellow', 7, 10),
(6, 'Banana', 8, 9),
(7, 'Meat', 12, 17),
(8, 'Beef', 13, 14),
(9, 'Pork', 15, 16);


将加节点写成存储过程,从安全角度、复用性、优化性得到提高 。

================================================================加节点 CALL addjiedian('Red','Strawberry');
DELIMITER //
CREATE PROCEDURE addjiedian(IN dangqianjiedianname VARCHAR(10),IN zijidianname VARCHAR(10))
begin


SELECT @myLeft:=lft,@myRight := rgt FROM Food
WHERE name = dangqianjiedianname;
UPDATE Food SET rgt = rgt + 2 WHERE rgt > @myLeft;
UPDATE Food SET lft = lft + 2 WHERE lft > @myLeft;
INSERT INTO Food(name, lft, rgt) VALUES(zijidianname, @myLeft + 1, @myLeft +2);

END
//
DELIMITER ;



================================================================删除节点及子节点 CALL deleteallzijiedian(4);   id号

DELIMITER //
CREATE PROCEDURE deleteallzijiedian(IN pid int)
begin

select @myLeft:=lft, @myRight:=rgt, @myWidth:=rgt-lft+1
from Food where id=pid;
 
delete from Food where lft between @myLeft and @myRight;
select * from Food;

update Food set rgt=rgt-@myWidth where rgt>@myRight;
update Food set lft=lft-@myWidth where lft>@myLeft;
 
select * from Food;


END
//
DELIMITER ;




删除节点 (节点没有子节点的节点) CALL deletezijiedian(6,7,'Strawberry');

待续。。。。


php取数据

http://www.jb51.net/article/52188.htm


其它参考资料

https://wenku.baidu.com/view/634656b0561252d381eb6e8f

http://blog.youkuaiyun.com/i_bruce/article/details/41558063


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛慢慢向上爬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值