Mysql数据库系列(一)sql查询用户下面的三级用户

这篇博客介绍了如何使用MySQL查询当前用户下的三级用户。通过建立用户与上级用户的关联关系,利用UNION ALL进行三层递归查询,实现对任意用户下三级子用户的查找。示例中展示了具体的SQL执行语句及其结果。

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

Mysql数据库系列(一)sql查询当前用户下面的三级用户

前言

最近业务上有个需求,推广系统中,团队需要查询当前用户下面的三级用户,以前也遇到过,只是没做记录,本次做个记录,方便后面复用。


一、问题描述:

1.用户A,推广产品给用户B。此时绑定关系,B属于A的下级。
2.用户B,推广产品给用户E。此时绑定关系,E属于B的下级。
3.用户E,推广产品给用户I。此时绑定关系,I属于E的下级。
4.此时需求:
 需要查询,任意用户的下面三级用户。
 以用户A为例: 即查询的用户:用户B,用户C,用户D,用户E,用户I

如图所示
推广逻辑图

二、数据库设计

1.数据库设计

CREATE TABLE `sys_user` (
  `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID',
  `login_name` varchar(30) DEFAULT NULL COMMENT '登录账号',
  `spread_parent_id` bigint(20) DEFAULT '0' COMMENT '注册用户上级id(默认0)',
  `user_open_id` varchar(255) DEFAULT NULL COMMENT '小程序端注册的openid',
  `user_name` varchar(30) DEFAULT '' COMMENT '用户昵称',
  `user_type` varchar(2) DEFAULT '00' COMMENT '用户类型(00系统用户 01注册用户)',
  `user_money` decimal(10,2) DEFAULT '0.00' COMMENT '用户当前金额/佣金',
  `user_lock_money` decimal(10,2) DEFAULT '0.00' COMMENT '用户冻结金额',
  `user_accumulated_money` decimal(10,2) DEFAULT '0.00' COMMENT '用户累计金额',
  `email` varchar(50) DEFAULT '' COMMENT '用户邮箱',
  `phonenumber` varchar(11) DEFAULT '' COMMENT '手机号码',
  `sex` char(1) DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
  `avatar` varchar(255) DEFAULT '' COMMENT '头像路径',
  `password` varchar(50) DEFAULT '' COMMENT '密码',
  `salt` varchar(20) DEFAULT '' COMMENT '盐加密',
  `status` char(1) DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',
  `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
  `login_ip` varchar(50) DEFAULT '' COMMENT '最后登录IP',
  `login_date` datetime DEFAULT NULL COMMENT '最后登录时间',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`user_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='用户信息表';

2.部分数据

部分数据隐藏(示例):
部分数据

  • sql执行语句查询当前用户下面三级:
#sql执行语句查询当前用户下面三级
select distinct
user_id,dept_id,spread_parent_id,user_name,avatar,
user_type,phonenumber,status,create_time,del_flag
from
(
select u2.* 
from sys_user u1,sys_user u2 
where u1.user_id=28 and u2.spread_parent_id=u1.user_id
union all
select u3.* from sys_user u3,(
select u2.* from sys_user u1,sys_user u2
where u1.user_id=28 and u2.spread_parent_id=u1.user_id) t2 
where t2.user_id=u3.spread_parent_id
union all
select u4.* from sys_user u4,(
select u3.* from sys_user u2,sys_user u3 
where u2.spread_parent_id=28 and u3.spread_parent_id=u2.user_id) t3 
where t3.user_id=u4.spread_parent_id
) a  
WHERE del_flag =0 ORDER BY user_id DESC;
  • 响应结果。
    -响应结果

总结

本次主要记录,工作日常,以备后面复用,如果大家有帮助,可以收藏一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

颜良配情深

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

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

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

打赏作者

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

抵扣说明:

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

余额充值