无限级分销系统查自己上级、下级之多叉树实现关系速查

文章讨论了如何在数据库中设计和操作一个用于无限级分销系统的多叉树结构,如`user_ppp`表,以高效地查询用户层级关系,包括查找下级数量和更新特定用户新增层级后的所有右侧值。使用SQL语句展示了如何插入新用户和更新相关范围的数据。
摘要由CSDN通过智能技术生成

时间:2020-08-07 17:37:13

无限级分销系统查自己上级、下级之多叉树实现关系速查

CREATE TABLE `user_ppp` (
  `uid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'uid',
  `name` varchar(50) NOT NULL DEFAULT '' COMMENT '姓名',
  `puid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '自然关系pid',
  `level` int(11) NOT NULL DEFAULT '0' COMMENT '自然等级从parent的level+1;parent=0是的level为1;',
  `ppuid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '自然关系pid的parentid',
  `rootuid` int(10) NOT NULL DEFAULT '0' COMMENT 'rootuid,puid=0的时候rootuid=uid表示一支',
  `uleft` int(11) NOT NULL DEFAULT '0' COMMENT 'left数字',
  `uright` int(11) NOT NULL DEFAULT '0' COMMENT 'right数字',
  PRIMARY KEY (`uid`),
  KEY `ix_rootuid` (`rootuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户层级关系表;隔离多叉树形式';
 
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (1, 'A', 0, 1, 0, 1, 1, 60);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (2, 'AA', 1, 2, 0, 1, 2, 3);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (3, 'AB', 1, 2, 0, 1, 4, 11);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (5, 'ABA', 3, 3, 0, 1, 5, 6);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (6, 'ABB', 3, 3, 0, 1, 7, 8);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (7, 'ABC', 3, 3, 0, 1, 9, 10);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (4, 'AC', 1, 2, 0, 1, 12, 59);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (8, 'AC', 4, 3, 0, 1, 13, 54);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (11, 'AC1', 8, 4, 0, 1, 14, 15);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (12, 'AC2', 8, 4, 0, 1, 16, 17);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (13, 'AC3', 8, 4, 0, 1, 18, 19);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (14, 'AC4', 8, 4, 0, 1, 20, 21);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (15, 'AC5', 8, 4, 0, 1, 22, 23);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (16, 'AC6', 8, 4, 0, 1, 24, 25);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (17, 'AC7', 8, 4, 0, 1, 26, 27);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (18, 'AC8', 8, 4, 0, 1, 28, 37);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (27, 'A1800', 18, 5, 0, 1, 29, 30);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (28, 'A1801', 18, 5, 0, 1, 31, 32);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (29, 'A1802', 18, 5, 0, 1, 33, 34);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (30, 'A1803', 18, 5, 0, 1, 35, 36);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (19, 'AC9', 8, 4, 0, 1, 38, 39);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (20, 'AC10', 8, 4, 0, 1, 40, 41);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (21, 'AC11', 8, 4, 0, 1, 42, 43);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (22, 'AC12', 8, 4, 0, 1, 44, 45);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (23, 'AC51', 8, 4, 0, 1, 46, 47);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (24, 'AC61', 8, 4, 0, 1, 48, 49);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (25, 'AC71', 8, 4, 0, 1, 50, 51);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (26, 'AC81', 8, 4, 0, 1, 52, 53);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (9, 'ACA', 4, 3, 0, 1, 55, 56);
INSERT INTO `user_ppp`(`uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright`) VALUES (10, 'ACB', 4, 3, 0, 1, 57, 58);

图片.png

select uid,name,puid,level,ppuid,rootuid,uleft,uright from qx_user_ppp WHERE rootuid = 1 ORDER BY uleft
 
# 查uid为3的下级数量 为3 快速查找就是 (11-4-1) / 2 
select count(uid) where puid = 3

uid为5下新增一级需要更新的所有右侧的值

图片.png

# step 1
INSERT INTO `user_ppp` ( `uid`, `name`, `puid`, `level`, `ppuid`, `rootuid`, `uleft`, `uright` )
VALUES
    ( 50, 'xxx', 5, 4, 0, 1, 7, 8 );
# step 2
UPDATE user_ppp 
SET uleft = uleft + 2,
uright = uright + 2 
WHERE
    rootuid = 1 // 根树条件
    AND uleft >=7 // 右侧分支

打开dns.37it.cn免费申请二域名解析方可使用 否则会出现00002993错误 用替换工具ultrareplace,文本编辑工具:Notepad++ 下面是需要替换的地方 ceshi.vvei.cn 超人脉管家 http://mp.weixin.qq.com/s?__biz=MzA4MTI1OTI1OA==&mid=212268202&idx=1&sn=581c81665c013e1ee5c01db440df2593#rd 这个到时候自己撰写一份新手指南替换 掉 http://123.com/index.php?g=Admin&m=Login&a=index 后台地址 admin admin888 微信管理>>自定义回复 修改 http://ceshi.vvei.cn/ 替换为 你的网站 1、数据库连接地址:Public\Conf\config.php 2、微信菜单修改:Public\Conf\button_config.php,然后“微信管理”-“菜单管理”-“重新生成菜单”。 另下面三行代码请修改: $link_config (还没有关注的,引导关注,点击“立即关注”进入微信文章) $config_good_pic (购买时,页面上面的产品图) $headimgurl (没有购买前的头部左上角LOGO) 3、公众号里面的支付授权目录:直接域名就可以 支付回调URL:直接域名就可以 告警通知URL:先空着 4、更“换推广二维码”图片,图片在根目录保持格式、名字不变。记得在服务器根目录/imgpublic里删除其它多余的图片,只留benbendou.jpg即可。 5、页面的CSS在这里改:Application\Tpl\App\default\Public\Static\css 6、如果头像出不来,可以把根目录的imgpublic文件夹权限设为777 7、微信支付前显示的图片: Application\Tpl\App\default\Public\Static\images\productsinfo.jpg 对应更改的文件:Application\Tpl\App\default\Index\pay.html 8、更改下单时的“备注”内容:Application\Tpl\App\default\Index\index.html 9、关于修改微信关注后回复的内容目录地址: Application\Lib\Action\Admin\WechatAction.class.php 可修改第249,263,267行,可修改中文汉字,不要修改参数代码。 =============================================================== 后台登录:http://您的域名/index.php?g=Admin 初始帐号:admin 密 码:admin888
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值