三级分销数据库设计

一,数据结构

在这里插入图片描述

二,查询方法

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

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

SELECTT2.* 
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 ) T1JOIN sj_user T2 ON T1._id = T2.id 
ORDER BYid ASC;
  • 查询子节点最上三级的父节点

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

SELECTT2.*,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 ) T1JOIN sj_user T2 ON T1._id = T2.id 
WHERET1.plevel > 0 AND T1.plevel <= 3 
ORDER BYid ASC;
  • 父节点查询出下面所有的子节点
SELECTt3.* 
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 
WHEREchild_id != 0;
  • 查询节点的最近三代子节点

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

SELECTT2.*,T1.clevel 
FROM(SELECT@r AS _pid,(SELECT@r := group_concat( id ) FROM`sj_user` WHEREFIND_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 ) T1INNER JOIN sj_user T2 ON FIND_IN_SET( T2.pid, T1._pid ) 
WHERET1.clevel <= 3 
ORDER BYid 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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【不可不知的考研复试秘籍 3】

----------------------------------------------------------------------------------------------------- 考研复试科研背景提升班 教你快速深入了解掌握考研复试面试中的常见问题以及注意事项&#xff0c;系统的教你如何在短期内快速提升自己的专业知识水平和编程以及英语…

软考信息系统项目管理师零基础怎么学习?

软考考信息系统项目管理师&#xff0c;零基础怎么入手高项&#xff1f; 要我说对于没有基础的人群来说零基础考信息系统项目管理师还是有一定的难度的&#xff0c;难就难在需要时间去了解基础&#xff0c;而相对于系统分析师、系统构架设计师、网络规划设计师、系统规划与管理…

软考59-上午题-【数据库】-小结+杂题

一、杂题 真题1&#xff1a; 真题2&#xff1a; 真题3&#xff1a; 真题4&#xff1a; 真题5&#xff1a; 真题6&#xff1a; 真题7&#xff1a; 真题8&#xff1a; 二、数据库总结 考试题型&#xff1a; 1、选择题&#xff08;6题&#xff0c;6分&#xff09; 2、综合分析题…

3分钟开通GPT-4

AI从前年12月份到现在已经伴随我们一年多了&#xff0c;还有很多小伙伴不会开通&#xff0c;其实开通很简单&#xff0c;环境需要自己搞定&#xff0c;升级的话就需要一张visa卡&#xff0c;办理visa卡就可以直接升级chatgptPLSU 一、虚拟卡支付 这种方式的优点是操作简单&…

使用java的Stream流进行Collectors.groupingBy分组后生成Map,对Map进行删除原集合是否会发生改变

在Java中&#xff0c;当我们使用Collectors.groupingBy方法对集合进行分组操作时&#xff0c;生成的新映射&#xff08;Map&#xff09;是基于原始集合&#xff08;allItems&#xff09;的数据结构和内容创建的。这意味着&#xff0c;如果你更改了新的映射allItemMap中的值&…

开发中的一些重要概念

目录 应用&#xff08;Application&#xff09;/ 系统&#xff08;System&#xff09; 模块&#xff08;Module&#xff09;/ 组件&#xff08;Component&#xff09; 分布式&#xff08;Distributed&#xff09; 集群&#xff08;Cluster&#xff09; 主&#xff08;Maste…

leetcode热题HOT 238. 除自身以外数组的乘积

一、问题描述&#xff1a; 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#x…

web游戏-飞机大战

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的,私信本人,发演示地址,可以后再订阅,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、开心消消乐、扑鱼达人、飞机大战等等 <!DOCTYPE html> <html lang=&q…

Golang简介与基本语法介绍

Go语言&#xff08;通常称为Golang&#xff09;是由Google开发的一种静态强类型、编译型、并发性强的编程语言。Go语言的设计初衷是为了提高大型软件系统的开发效率&#xff0c;并解决其他编程语言在处理多核处理器、网络系统和大型代码库时遇到的一些问题。 一、Go语言的特点…

防止 服务器 被爆破 登录的 方法

防止 服务器 被爆破 登录的 方法 Centos8防止云服务器被爆破登录的应对办法 https://blog.csdn.net/qq_64573330/article/details/126948166

【牛客】SQL136 每类试卷得分前3名-窗口函数

描述 现有试卷信息表examination_info&#xff08;exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间&#xff09;&#xff1a; idexam_idtagdifficultydurationrelease_time19001SQLhard602021-09-01 06:00:0029002SQLhard602021-09…

请解释Netty中的Pipeline和ChannelHandler,以及它们是如何工作的?如何在Netty中实现消息的编解码?有哪些常用的编解码器?

请解释Netty中的Pipeline和ChannelHandler&#xff0c;以及它们是如何工作的&#xff1f; 在Netty中&#xff0c;Pipeline和ChannelHandler是两个核心概念&#xff0c;它们共同协作来处理网络事件和数据流。 Pipeline&#xff08;管道&#xff09; Pipeline可以看作是一个处理…

ardupilot 及PX4姿态误差计算算法对比分析

目录 文章目录 目录摘要1.APM姿态误差计算算法2.PX4姿态误差计算算法3.结论摘要 本节主要记录ardupilot 及PX4姿态误差计算算法差异对比过程,欢迎批评指正。 备注: 1.创作不易,有问题急时反馈 2.需要理解四元物理含义、叉乘及点乘含义、方向余弦矩阵含义、四元数乘法物理含…

sklearn函数:train_test_split(分割训练集和测试集)

函数的功能是分割训练集和测试集 函数中参数的用法&#xff1a; 1. test_size&#xff1a;float or int, defaultNone 测试集的大小&#xff0c;如果是小数的话&#xff0c;值在&#xff08;0,1&#xff09;之间&#xff0c;表示测试集所占有的比例&#xff1b; 如果是整数…

java字符流

1、FileWriter写数据 public static void main(String[] args) throws IOException {FileWriter fw new FileWriter("os\\a.txt");fw.write("大得");//数组写法char[] chs {a, b, c, d, e};fw.write(chs);fw.close();}2、FileReader 读数据 public stati…

2024年2核4G服务器优惠价格,选阿里云还是腾讯云?

2核4G云服务器选阿里云还是腾讯云&#xff1f;2核4G服务器多少钱一年&#xff1f;1个月费用价格&#xff1f;腾讯云轻量2核4G5M带宽服务器165元一年、252元15个月、三年756元&#xff0c;阿里云2核4G4M带宽轻量服务器165元12个月、ECS云服务器2核4G配置30元3个月、2核4G5M带宽1…

MySQL 多表查询 连接查询 自连接

介绍 自连接查询&#xff0c;可以是内连接查询&#xff0c;也可以是外连接查询&#xff0c;一句话自己连接自己&#xff0c;一个表当作两个表进行连接。 语法 SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件两个表A说明是同一张表&#xff0c;但是别名不同 案例…

文献速递:深度学习疾病预后--使用深度学习对数字病理图像进行胃癌的准确诊断和预后预测:一项回顾性多中心研究

Title 题目 Accurate diagnosis and prognosis prediction of gastric cancer using deep learning on digital pathological images: A retrospective multicentre study 使用深度学习对数字病理图像进行胃癌的准确诊断和预后预测&#xff1a;一项回顾性多中心研究 01 文献…

OpenMMlab AI实战营第四期培训

OpenMMlab AI实战营第四期培训 OpenMMlab实战营第四次课2023.2.6学习参考一、什么是目标检测1.目标检测下游视觉任务2.图像分类 v.s. 目标检测 二、目标检测实现1.滑窗 Sliding Window2.滑窗的效率问题3.改进思路&#xff08;1&#xff09;消除滑窗中的重复计算&#xff08;2&a…

x6.js 流程图绘制笔记,常用函数

官方参考网站如下&#xff1a;https://antv-x6.gitee.io/zh/docs/tutorial/about 安装x6 输入以下命令 npm install antv/x6 --save 引用插件代码如下&#xff1a; import { Graph } from antv/x6; 创建绘制区域 this.guiX6 new Graph({container: document.querySelect…