MySQL递归查询上下级菜单

本文介绍了如何使用MySQL的一条SQL语句查询多级菜单关系,主要涉及GROUP_CONCAT()函数和FIND_IN_SET函数的使用。通过示例展示了如何根据单位ID获取其所有下级和上级单位,以及如何递归构建单位树。

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

正文

在传统的后台管理系统里面经常会需要展示多级菜单关系,今天我们来学一下如何使用一条SQL语句展示多级菜单。

现在我们有一张corpinfo单位表,里面有一个belong字段指向上级单位,首先来看一下现在表里有什么数据:

SELECT uid,ubelong FROM corpinfo

MySQL递归查询上下级菜单

 

现在是类似下面这样的一个三级菜单,uid为1的是我们的顶级菜单,ubelog为0。

MySQL递归查询上下级菜单

 

现在我们想实现传入一个 uid ,把当前 uid 和其下级单位的 uid 都展示出来,当然我们可以使用代码或者网上常见的存储过程来实现,但是今天我们用一条SQL语句来实现该效果:

先来看看我们的SQL语句

SELECT DATA.uid FROM(
      SELECT
      @ids AS _ids,
      (
      SELECT @ids := GROUP_CONCAT(uid)
      FROM corpinfo
      WHERE FIND_IN_SET(ubelong, @ids)
      ) AS cids,
      @l := @l+1 AS level
      FROM corpinfo, (SELECT @ids := (参数) , @l := 0 ) b
      WHERE @ids IS NOT NULL
      ) ID, corpinfo DATA
WHERE FIND_IN_SET(DATA.uid, ID._ids)
ORDER BY level,uid

看下执行结果:

MySQL递归查询上下级菜单

 

可以看到传入 uid 为 1 后,列出了 uid 为 1 的所有下级单位,连第三级的菜单也列出来了。

MySQL递归查询上下级菜单

 

比较核

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值