三级分销已是一个越来越常见的需求。如何去获取到分销商的下级?如何去获取上级分销商?这里提供几条sql语句,无需创建存储过程/函数,简单易用。

本文中,采用邻接表的方式来进行处理,什么是邻接表?有没有其他处理方法?那看这篇文章去:mysql(多级分销)无限极数据库设计方法

邻接表结构

设计表如下,实际场景可根据需要自己更改:

CREATE TABLE `distribution_user` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,

`pid` int(11) unsigned NOT NULL COMMENT '父代id',

PRIMARY KEY (`id`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

其中,id和pid是最为重要的,字段名可以不同,当这两者却必须存在,其他字段可自行增减。

为方便下面sql查询结果展示,现在给这表加入了下面数据:

id

name

pid

1

一代

0

2

二代1

1

3

二代2

1

4

三代1 (二代1的仔)

2

5

三代2 (二代1的仔)

2

6

四代1 (三代1的仔)

4

7

四代2 (三代2的仔)

5

8

五代1 (四代1的仔)

6

9

六代1 (五代1的仔)

8

下面就正式开始我们的sql之旅吧!

查询数据

一、根据子节点查询上面所有的父节点

搜索 六代1 的所有父级(六代1 的id为9)为例:

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

SELECT

T2.*

FROM

(

SELECT

@r AS _id,

( SELECT @r := pid FROM `distribution_user` WHERE id = _id ) AS 2v2,

@l := @l + 1 AS lvl

FROM

( SELECT @r := 9 ) vars, -- 查询id为9的所有上级

distribution_user h

WHERE

@r <> - 1

) T1

JOIN distribution_user T2 ON T1._id = T2.id

ORDER BY

id ASC;

注意:上面查询的子节点包括了它自身

根据上面查询子节点所有的父节点方法,改装一下,得到最常用到的三级分销:最近三代父节点。

二、根据子节点查询最近3代父节点

搜索 六代1 的最近3代父级(六代1 的id为9)为例:

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

SELECT

T2.*,

T1.plevel

FROM

(

SELECT

@r AS _id,

( SELECT @r := pid FROM `distribution_user` WHERE id = _id ) AS pid,

@l := @l + 1 AS plevel

FROM

( SELECT @r := 9 ) vars,-- 查询id为9的所有上级

( SELECT @l :=- 1 ) plevel,

distribution_user h

WHERE

@r <> - 1

) T1

JOIN distribution_user T2 ON T1._id = T2.id

WHERE

T1.plevel > 0

AND T1.plevel <= 3

ORDER BY

id ASC;

其中,别名T2的表示原本的数据,而T1中的plevel即是父代的级别(1:直接父代,2:二级父代,3:三级父代)

如果plevel为0,代表是查询的节点自身。

三、根据父节点查询出下面所有的子节点

搜索三代1的所有子孙(三代1的id为4)为例:

@p := 4 设置自己所要搜索父代的id

SELECT

t3.*

FROM

(

SELECT

*,

IF

( find_in_set( t1.pid, @p ), @p := concat( @p, ',', id ), 0 ) AS child_id

FROM

( SELECT * FROM distribution_user t ORDER BY id ) t1,

( SELECT @p := 4 ) t2

) t3

WHERE

child_id != 0;

上面的方式无疑可以查询到所有的子节点,但是无法知道其代数,并别提获取最近3代是哪些了。结合根据子节点查询最近3代父节点方法,完成所需要的获取代数,并且可进行筛选的方法。

四、根据父节点查询最近3代子节点

搜索三代1的最近3代子孙(三代1的id为4)为例:

@r := 4 设置自己所要搜索父代的id

SELECT

T2.*,

T1.clevel

FROM

(

SELECT

@r AS _pid,

(

SELECT

@r := group_concat( id )

FROM

`distribution_user`

WHERE

FIND_IN_SET( pid, _pid )) AS cid,

@l := @l + 1 AS clevel

FROM

( SELECT @r := 4 ) vars,-- 查询id为4的所有子节点

( SELECT @l := 0 ) clevel,

distribution_user h

WHERE

@r IS NOT NULL

) T1

INNER JOIN distribution_user T2 ON FIND_IN_SET( T2.pid, T1._pid )

WHERE

T1.clevel <= 3

ORDER BY

id ASC;

本文地址:https://blog.csdn.net/weixin_38125045/article/details/107318127

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

mysql user分销查询_荐查询无限级/三级分销的简单易用SQL...相关推荐

  1. 智伴机器人三级分销模式_企业选择微信三级分销定制开发原因?

    随着微信三级分销系统的不断发展,近期很多企业都在做或者已经在进行微信三级分销系统的开发,微信三级分销定制开发商说道,很多人都不太明白,为什么企业都给纷纷进行微信三级分销系统的定制开发呢?选择进行微信三 ...

  2. 全国首例微信三级分销被认定为传销,三级分销“身世”揭秘(上)

    全国首例微信三级分销被认定为传销,三级分销"身世"揭秘(上) 第一次接触三级分销概念是在2015年上半年的一次培训会上,老师在微信群里发了一个水果分销的链接,这种病毒式分销方法顿时 ...

  3. 三级分销系统是什么模式,三级分销模式合法吗?三级分销合法吗

    三级分销系统是什么模式,三级分销模式合法吗?三级分销合法吗 三级分销是否合法?大家关心的是,网上商城三级分销的模式,不需要实体店面的一种营销方式目前是否被明确合法与非法. 大家先看传统的一个销售商品的 ...

  4. php三级分销无法绑定佣金,2018最新三级分销佣金比例设置方案

    首先大家要意识到,微信分销系统的三级分销,顶多也只能做到三级,超过三级就可能造成违法,所以最好是超过三级就不能再获得佣金.你如果将佣金设置好了,就能带动分销商的积极性,为你带来更大的销量和受益. 下面 ...

  5. 查询无限级/三级分销的简单易用SQL

    三级分销已是一个越来越常见的需求.如何去获取到分销商的下级?如何去获取上级分销商?这里提供几条sql语句,无需创建存储过程/函数,简单易用. 本文中,采用邻接表的方式来进行处理,什么是邻接表?有没有其 ...

  6. mysql执行效率低_如何查询mysql中执行效率低的sql语句

    展开全部 一.MySQL数据库有几个配置选项可以32313133353236313431303231363533e59b9ee7ad9431333337373563帮助我们及时捕获低效SQL语句 1, ...

  7. mysql通过集合查询_连接查询与集合查询

    4.外连接查询 在前面讲述的连接操作中,返回的结果都是满足连接条件的记录.有些时候,开发人员或者用户对于不满足连接条件的部分记录也感兴趣,这个时候就需要使用外连接查询.外连接查询不仅可以返回满足连接条 ...

  8. gispython定义查询_定义查询方法

    从方法名称中可以制定特定用于存储的查询和更新 通过使用@Query注解手动定义查询 方法的查询策略设置 通过 @EnableJpaRepositories(queryLookupStrategy = ...

  9. 街道编号怎么查询_上海查询个人社保缴纳记录怎么查

    参保带来多项保障,你知道自己的社保账户怎么查询吗?近期多位有小伙伴咨询查询个人社保缴费记录的问题,本文带大家了解一下! 我们在职期间的社保缴费都是由用人单位申报的,也都是有相应记录的.通过查询社保缴纳 ...

最新文章

  1. 关于.NET玩爬虫这些事 【初码干货】
  2. ML:MLOps系列讲解之《基于ML的软件的三个层次之02 Model: Machine Learning Pipelines——2.5 Different forms of ML workfl》解读
  3. AIX 6.1 异步 I/O 的 配置与性能评估
  4. mysql中订单产品名,Ecshop后台订单列表增加”商品名”检索字段
  5. MySQL操作之条件,排序,分页,聚合函数,分组,连接,子查询,自连接查询总结...
  6. python替换字符的操作_Python中的字符串替换操作示例
  7. 【书籍推荐】给大家分享和推荐前端相关书籍
  8. CUDA学习(二十三)
  9. 最新Web前端面试题精选大全及答案
  10. nextcloud私有云盘搭建
  11. 郑树生与李一男的对望
  12. 蔬菜类别二级计算机,国家标准:蔬菜分类.doc
  13. XML和注解(Annotation)
  14. HDU 3687 National Day Parade(暴力)
  15. 数学之路(3)-数据分析(5)
  16. python的Tkinter库简单应用——开发一个简易计算器
  17. Microsoft Excel 教程:如何在 Excel 单元格中设置文本格式?
  18. imagex工具整合window11的wim镜像
  19. 假如我国国民生产总值的年增长率为7%, 计算10年后我国国民生产总值与现在相比增长多少百分比
  20. 思科isis路由的优先级_ISIS路由基本配置实验

热门文章

  1. 全球木马库Xavie分析,Google Play上有近800个木马软件
  2. 写论文前你必须知道的十大论文类型和五大研究方法
  3. Glide SimpleTarget 过时
  4. Android授权登录新浪微博获取用户个人信息
  5. 记录一个H3C的技术甜甜圈
  6. 旅通软件:旅游管理系统是用?还是不用?
  7. 童话镇计算机按键音乐,【空格键的音乐吧】这里是一个童话镇
  8. 打造App-GitHub 开放API大总结
  9. WIN7以上系统WDDM虚拟显卡开发
  10. linux命令总结(三)