MySql层级关系表构建

本文介绍了为何需要构建层级表以支持穿透查询并避免递归,通过示例展示了如何创建用户信息表和层级信息表,以及如何初始化数据以反映多级上下级关系。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

存在多级上下级关系,构建竖向层级表。


一、为什么要构建层级表?

为了方便穿透查询及不使用递归查询。

二、怎样构建

1.用户样例表和层级样例表

代码如下(示例):

#用户信息表:维护了用户信息及对应的上级信息。
create table user_info(
    log_id         bigint(11)      NOT NULL AUTO_INCREMENT COMMENT '主键',
    user_id        varchar(30)     DEFAULT NULL COMMENT '本级用户编号',
    up_user_id     varchar(30)     DEFAULT NULL COMMENT '上级用户编号',
    primary key(log_id)
) comment='用户信息表';

#用户层级信息表:维护了用户的所有上级信息记录。
create table user_lv_info(
    log_id         bigint(11)      NOT NULL AUTO_INCREMENT COMMENT '主键',
    user_id        varchar(30)     DEFAULT NULL COMMENT '本级用户编号',
    up_user_id     varchar(30)     DEFAULT NULL COMMENT '上级用户编号',
    primary key(log_id)
) comment='用户层级信息表';

2.层级样例表构建

代码如下(示例):

为了方便查询所有下级的数据,避免使用递归查询,即所有的上级都在user_lv_info。
    user_info中的数据为:
        user_id  up_user_id
        用户1    用户2
        用户2    用户3
        用户3    null
    
    user_lv_info层级表中的上下级关系存储为:
        user_id  up_user_id
        用户1    用户1       (自己也认为是自己的上级)
        用户1    用户2
        用户1    用户3
        
        用户2    用户2       (自己也认为是自己的上级)
        用户2    用户3
        
        用户3    用户3       (自己也认为是自己的上级)

#初始化测试数据
insert into user_info(user_id,up_user_id) values('user1','user2');
insert into user_info(user_id,up_user_id) values('user2','user3');
insert into user_info(user_id,up_user_id) values('user3',null);

​​​​​​​#先插入本级
insert into user_lv_info(
    user_id   ,
    up_user_id   
) select 
    user_id,
    user_id
  from user_info;

#再插入本级与直属上级
insert into user_lv_info(
    user_id   ,
    up_user_id   
) select 
    user_id,
    up_user_id
  from user_info;

#再插入本级与最顶层上级
#此Sql需要执行多次,直至无新增记录为止
insert into user_lv_info(
    user_id    ,
    up_user_id 
) select
    rel.user_id    ,
    user3.up_user_id
from
    user_lv_info AS rel,
    (
        select
            user_id ,
            max(log_id) log_id
        from
            user_lv_info
        group by
            user_id
    ) AS user2,
    user_info AS user3
where rel.log_id = user2.log_id
  and rel.up_user_id = user3.user_id
  and user3.up_user_id is not null;

​​​​​​​


总结


例如:以上就是今天要讲的内容,简单介绍了下层级表的构建。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值