三级分销数据库设计

一,数据结构

在这里插入图片描述

二,查询方法

1.mysql递归查询
  • 获取id9的所有上级

@r := 9 设置自己所要搜索子节点的id

SELECT
	T2.* 
FROM
	(
	SELECT
		@r AS _id,
		( SELECT @r := pid FROM `sj_user` WHERE id = _id ) AS 2v2,
		@l := @l + 1 AS lvl 
	FROM
		( SELECT @r := 9 ) vars, -- 查询id为9的所有上级
		sj_user h 
	WHERE
		@r <> - 1 
	) T1
	JOIN sj_user T2 ON T1._id = T2.id 
ORDER BY
	id ASC;
  • 查询子节点最上三级的父节点

其中,别名T2的表示原本的数据,而T1中的plevel即是父代的级别(1:直接父代,2:二级父代,3:三级父代)如果plevel为0,代表是查询的节点自身。

SELECT
	T2.*,
	T1.plevel
FROM
	(
	SELECT
		@r AS _id,
		( SELECT @r := pid FROM `sj_user` WHERE id = _id ) AS pid,
		@l := @l + 1 AS plevel 
	FROM
		( SELECT @r := 9 ) vars,	-- 查询id为9的所有上级
		( SELECT @l :=- 1 ) plevel,
		sj_user h 
	WHERE
		@r <> - 1 
	) T1
	JOIN sj_user T2 ON T1._id = T2.id 
WHERE
	T1.plevel > 0 
	AND T1.plevel <= 3 
ORDER BY
	id ASC;
  • 父节点查询出下面所有的子节点
SELECT
	t3.* 
FROM
	(
	SELECT
		*,
	IF
		( find_in_set( t1.pid, @p ), @p := concat( @p, ',', id ), 0 ) AS child_id 
	FROM
		( SELECT * FROM sj_user t ORDER BY id ) t1,
		( SELECT @p := 4 ) t2 
	) t3 
WHERE
	child_id != 0;

  • 查询节点的最近三代子节点

@r := 1 为要查询的数据id

SELECT
	T2.*,
	T1.clevel 
FROM
	(
	SELECT
		@r AS _pid,
		(
		SELECT
			@r := group_concat( id ) 
		FROM
			`sj_user` 
		WHERE
		FIND_IN_SET( pid, _pid )) AS cid,
		@l := @l + 1 AS clevel 
	FROM
		( SELECT @r := 1 ) vars,-- 查询id为1的所有子节点
		( SELECT @l := 0 ) clevel,
		sj_user h 
	WHERE
		@r IS NOT NULL 
	) T1
	INNER JOIN sj_user T2 ON FIND_IN_SET( T2.pid, T1._pid ) 
WHERE
	T1.clevel <= 3 
ORDER BY
	id ASC;

  1. 使用中间关系表
    递归调用虽然也能处理,但是数据量大了很容易产生性能问题。如果再统计每个级别下会员的消费,收入统计时,需要和消费表关系查询,那就耗时更长。换个思路来,我再创建个表,记录用户等级从属关系,然后在生成新用户的时候插入一条新的关系记录就可以了。pid是父级id,cid是子id,plevel是父级是子级的几层关系。
    关系表是在用户注册时产生的,且核心也是以新插入数据为基点,向上找。
    例如:用户id=2,名称为二级1-1 发展了一个下级。user表中新增一个用户自增主键id为11,通过推荐码找自己的上级是“二级1-1”且userid=2,
    对应关系就是user2增加了一个一级子11,user1增加了一个二级子11
    在relation中插入一条数据 pid=2,cid=11,plevel=1
    再往上找userid=2的数据的pid为1
    在relation中插入一条数据 pid=1,cid=11,plevel=2
    在这里插入图片描述
    查询用户1的所有下级,查出来的cid列就是结果
select * from sj_relation where pid=1

查询所有用户4的一级下线,查出来的cid列就是结果

select * from sj_relation where pid = 4 and plevel = 1;

查询用户10的所有父级,查出来的pid列就是结果

select * from sj_relation where cid=10

假如假设一级用户返佣10%,二级用户返佣5%,计算四号用户的所有返佣
在这里插入图片描述

SELECT sum(DECODE(r.plevel,1,o.amount*0.1,2,o.amount*0.05)) AS rebate_amount FROM sj_relation r, sj_order o WHERE o.user_id = r.cid AND r.pid = '4' and r.plevel > 0

某些mysql版本会报错

SELECT r.*,case when r.plevel=1 then o.amount*0.1 when r.plevel=2 then o.amount*0.05 else 0 end as backmoney from sj_relation r,sj_order o WHERE o.user_id = r.cid AND r.pid = '4' and r.plevel > 0

在这里插入图片描述

SELECT sum(case when r.plevel=1 then o.amount*0.1 when r.plevel=2 then o.amount*0.05 else 0 end) from sj_relation r,sj_order o WHERE o.user_id = r.cid AND r.pid = '4' and r.plevel > 0 GROUP BY r.pid

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/430732.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MS2351M——RF 检测器/控制器

产品简述 MS2351M 是一款对数放大器芯片&#xff0c;主要用于接收信号强度 指示 RSSI 与功率放大器控制&#xff0c;工作频率范围是 50M  3000MHz &#xff0c; 因频率与温度不同&#xff0c;动态范围达 35dB 到 45dB 。 MS2351M 是电压响应器件&#xff0c; 50M…

哪些大型国企会储备GIS开发工程师?

随着数字化技术的不断发展和国家对数字化转型的重视&#xff0c;国企作为国民经济的中坚力量&#xff0c;开始走在数字化转型的前列。 许多国企&#xff0c;已经将数字化转型作为企业发展的重点战路&#xff0c;希望通过数字化技术的应用&#xff0c;推动企业的业务模式、管理…

Java8的Stream执行机制

Java8的Stream执行机制 Stream的概念解说Stream的概念解说-Stream的含义Stream的概念解说-现实类比Stream的概念解说-Stream中的概念Stream的执行机制Stream的执行机制-最直接的流水线实现方式Stream的执行机制-for循环也能干的事Stream的执行机制-基本类图Stream的执行机制-记…

短视频矩阵系统--抖去推---年后技术还能迭代更新开发运营吗?

短视频矩阵系统#短视频矩阵系统已经开发3年&#xff0c;年后这个市场还能继续搞吗&#xff1f;目前市面上开发短视频账号矩阵系统的源头公司已经不多了吧&#xff0c;或者说都已经被市场被官方平台的政策影响的不做了吧&#xff0c;做了3年多的矩阵系统开发到现在真的是心里没有…

Vue2:路由history模式的项目部署后页面刷新404问题处理

一、问题描述 我们把Vue项目的路由模式&#xff0c;设置成history 然后&#xff0c;build 并把dist中的代码部署到nodeexpress服务中 访问页面后&#xff0c;刷新页面报404问题 二、原因分析 server.js文件 会发现&#xff0c;文件中配置的路径没有Vue项目中对应的路径 所以…

python报名人数 2023年9月青少年编程电子学会python编程等级考试二级真题解析

目录 python报名人数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python报名人数 2023年9月 python编程等级考试级编程题 一、题目要求 1…

20240301-1-ZooKeeper面试题(一)

1. ZooKeeper 面试题&#xff1f; ZooKeeper 是一个开放源码的分布式协调服务&#xff0c;它是集群的管理者&#xff0c;监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终&#xff0c;将简单易用的接口和性能高效、功能稳定的系统提供给用户。 分布式应…

专家揭密,OLED透明屏原的原理

OLED透明屏的原理主要基于OLED&#xff08;有机发光二极管&#xff09;的发光特性。这种屏幕使用透明的电极和有机材料层&#xff0c;通过电流激发有机材料层中的载流子&#xff0c;使其进入发光材料并发生电荷复合&#xff0c;从而释放出光能。 具体来说&#xff0c;OLED透明屏…

【嵌入式】STM32控制脉冲个数

控制脉冲个数两种方式:中断技术、主从定时器技术。 1.主从模式控制 2.cubemx配置 2.1主定时器 以TIM3为例子。 1)从模式:失能; 2) 触发源:不选择; 3)内部时钟:勾选; 4)输出通道:CH2 pwm模式; 5)单脉冲模式:不选择;

006-CSS-常见问题汇总

常见问题汇总 1、伪元素与伪类2、偏门但好用的样式3、文字溢出三个点展示4、空白折叠问题5、文字的垂直居中6、 Vue项目中 在父组件中修改子组件样式7、BFC 概念7.1、兄弟元素外边距合并7.2、父子元素外边距塌陷 8、box-sizing8.1、box-sizing: border-box8.2、box-sizing: con…

Tensorflow2.0+部署(tensorflow/serving)过程备忘记录Windows

Tensorflow2.0部署&#xff08;tensorflow/serving&#xff09;过程备忘记录 部署思路&#xff1a;采用Tensorflow自带的serving进模型部署&#xff0c;采用容器docker 1.首先安装docker 下载地址&#xff08;下载windows版本&#xff09;&#xff1a;https://desktop.docke…

VM新建虚拟机

目录 一、前言二、下载镜像三、新建虚拟机 一、前言 上一篇文章我们介绍了VMware Workstation 15 Pro的安装与破解 &#xff0c;这篇文章我们介绍一下新建虚拟机 二、下载镜像 Linux使用最多的是CentOS和Ubuntu&#xff0c;下面是下载地址 Centos7:https://www.centos.org/…

MySQL 主从同步模式

MySQL主从同步是一种数据库复制技术&#xff0c;其中一个MySQL数据库服务器&#xff08;主服务器&#xff09;上的更改会被自动地传播到一个或多个其他数据库服务器&#xff08;从服务器&#xff09;。这有助于提高系统的可伸缩性、可用性和容错性。以下是设置MySQL主从同步的基…

颜永红:大模型时代的智能音频处理 | 演讲嘉宾公布

一、GAS 2024 2024中国国际音频产业大会(GAS)将于2024年3.27 - 28日在上海张江科学会堂举办。大会将以“音无界&#xff0c;未来&#xff08;Audio&#xff0c; Future&#xff09;”为主题。大会由中国电子音响行业协会、上海市浦东新区先进音视频技术协会共同主办&#xff0c…

【详识JAVA语言】String类oj练习

1. 第一个只出现一次的字符 class Solution { public int firstUniqChar(String s) {int[] count new int[256];// 统计每个字符出现的次数for(int i 0; i < s.length(); i){count[s.charAt(i)];}// 找第一个只出现一次的字符for(int i 0; i < s.length(); i){if(1 …

openinstall支持“荣耀商推”广告效果监测

近日&#xff0c;openinstall广告效果监测服务已全面对接荣耀商推渠道&#xff0c;开发者通过集成openinstall作为第三方归因服务商&#xff0c;可快速归因监测荣耀应用商店、荣耀浏览器、荣耀阅读、荣耀视频等生态资源的广告投放效果&#xff0c;以及通过配置回调事件做投放优…

ViT再升级!9个视觉transformer最新改进方案让性能飞跃

通过优化ViT结构和训练策略&#xff0c;我们可以提高模型的性能和计算效率&#xff0c;增强模型对局部信息的捕捉能力。同时解决一些原有模型存在的问题。 比如原始的ViT模型在处理高分辨率图像时&#xff0c;由于自注意力机制的计算复杂度与序列长度相关&#xff0c;会导致较…

rabbitmq4

独占队列&#xff1a;我们的队列只能被当前通道所绑定&#xff0c;不能被其他的连接所绑定&#xff0c;如果有其他的通道或连接再使用此队列的话&#xff0c;会直接报错&#xff0c;一般设置为false&#xff1a; autoDelete&#xff1a;消费者在消费完队列&#xff0c;并且彻底…

来分析一下dom破坏

一、如图 我们在这串代码的情况下看一下打印状态 打印x和y的时候把标签打印出来了&#xff0c;而document没有打印出来x值&#xff0c;所以我们要考虑特性 可以看到我们接下来的验证&#xff0c;其中document.cookie 已经被我们⽤img 标签给覆盖了 接下来覆盖系统函数 既然我们…

Linux 文件系列:深入理解文件描述符fd,重定向,自定义shell当中重定向的模拟实现

Linux 文件系列:深入理解文件fd,重定向,自定义shell当中重定向的模拟实现 一.预备知识二.回顾C语言中常见的文件接口跟重定向建立联系1.fopen函数的介绍2.fclose函数的介绍3.代码演示1.以"w"(写)的方式打开2.跟输出重定向的联系3.以 "a"(追加)的方式打开4.…