正文
在传统的后台管理系统里面经常会需要展示多级菜单关系,今天我们来学一下如何使用一条SQL语句展示多级菜单。
现在我们有一张corpinfo单位表,里面有一个belong字段指向上级单位,首先来看一下现在表里有什么数据:
SELECT uid,ubelong FROM corpinfo
现在是类似下面这样的一个三级菜单,uid为1的是我们的顶级菜单,ubelog为0。
现在我们想实现传入一个 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
看下执行结果:
可以看到传入 uid 为 1 后,列出了 uid 为 1 的所有下级单位,连第三级的菜单也列出来了。
比较核