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;
- 响应结果。
-
总结
本次主要记录,工作日常,以备后面复用,如果大家有帮助,可以收藏一下。