MySQL递归查询上下级菜单

表中数据如下所示,`uid`为1的是顶级菜单,`ubelog`为0。现在,我们想要根据输入的`uid`,展示该`uid`及其所有下级单位的`uid`。通常,我们可以通过代码或常用的存储过程实现此功能,但本文将使用SQL语句来解决。核心SQL语句如下:执行结果如下,传入`uid`为1后,列出了所有下级单位,包括第三级菜单。
MySQL递归查询上下级菜单
在后台管理系统中,展示多级菜单关系是一项常见需求。本文将介绍如何通过一条SQL语句实现这一功能。以`corpinfo`单位表为例,假设其中包含一个`belong`字段,用于指向上级单位。

表中数据如下所示,`uid`为1的是顶级菜单,`ubelog`为0。

现在,我们想要根据输入的`uid`,展示该`uid`及其所有下级单位的`uid`。通常,我们可以通过代码或常用的存储过程实现此功能,但本文将使用SQL语句来解决。

核心SQL语句如下:

执行结果如下,传入`uid`为1后,列出了所有下级单位,包括第三级菜单。

关键点在于使用了`GROUP_CONCAT()`函数,它在分组查询中将同一分组内的值连接起来,返回一个字符串结果。

例如,在`user`用户表中,查询名字相同的用户最小年龄的SQL语句如下,执行结果展示如下。

若要查询所有名字相同的人的所有年龄,使用`GROUP_CONCAT()`函数可以实现,如下所示,执行结果为:

通过`GROUP_CONCAT()`函数,每个名字只出现一次,同时显示了所有名字相同的人的id。

接着,我们介绍`FIND_IN_SET()`函数,它用于查找字段中的特定值。例如,在`book`书籍表中,查询作者包含`小A`的书籍时,可以使用`FIND_IN_SET()`函数实现,执行结果如下所示。

使用`LIKE`关键字查找时,会将包含`小A`的书籍全部列出,包括那些作者名字中仅包含`小A`的书籍。而`FIND_IN_SET()`函数则能正确匹配包含`小A`的书籍。

综上所述,通过`GROUP_CONCAT()`和`FIND_IN_SET()`函数的运用,我们成功实现了多级菜单的展示,并通过SQL语句解决了相关问题。这种方法简洁易懂,适用于需要查询层级关系的场景。

在实际应用中,我们还可以通过递归构建单位树,实现更复杂的业务逻辑。本文提供的SQL解决方案仅作为实现该功能的一种方法,如需进一步优化或调整,请根据实际情况进行调整。希望本文提供的信息对您有所帮助。2024-08-16
mengvlog 阅读 171 次 更新于 2025-12-16 05:58:33 我来答关注问题0
檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部