语法:FIND_IN_SET(str,strlist)
str :要查询的字符串
strlist :字段名 参数以”,”分隔 如 (1,2,6,8)
查询字段(strlist)中包含(str)的结果,返回结果为null或记录
知道了这两个函数后,现在回过头来看看前面的SQL语句:

文章插图
运行选中的代码后可以看到列出了上下级的关系,至于细节这里不再展开描述 。
既然我们能查出当前单位的所有下级单位,那么应该也能查询所有上级单位,来看下SQL:
SELECT uid FROM(SELECT@id AS _id,( SELECT @id := ubelongFROM corpinfoWHERE uid = @id) AS _pid,@l := @l+1 as levelFROM corpinfo,(SELECT @id := (参数), @l := 0 ) bWHERE @id > 0) ID, corpinfo DATAWHERE ID._id = DATA.uidORDER BY level DESC还是我们的corpinfo单位表,执行结果为:
文章插图
可以看到当输入 uid 为 5 时,列出了当前单位及其上级所有单位,SQL和上面的差不多,这里不再细说 。
最后补充一段代码,既然我们已经拿到想要的单位编号了,接下来就是要递归构建我们的单位树了,来看下代码:
/** * 递归将模块树构建成JSON数组 */private JSONArray getJsonArray(List<ClCorpinfo> list) {Map<Integer, List<ClCorpinfo>> map = new HashMap<>(16);List<ClCorpinfo> sonList;for (ClCorpinfo clCorpinfo : list) {if (map.get(clCorpinfo.getUbelong()) != null) {sonList = map.get(clCorpinfo.getUbelong());} else {sonList = new ArrayList<>();}sonList.add(clCorpinfo);map.put(clCorpinfo.getUbelong(), sonList);}JSONArray array = new JSONArray();if (list.size() > 0) {array = getChildrenTree(map, 0, 0);}return array;}/** * 递归构建模块树的子类 */public JSONArray getChildrenTree(Map<Integer, List<ClCorpinfo>> map, Integer uparentid, Integer level) {JSONArray array = new JSONArray();for (ClCorpinfo clCorpinfo : map.get(uparentid)) {JSONObject obj = new JSONObject();obj.put("uid", clCorpinfo.getUid());obj.put("ubelong", clCorpinfo.getUbelong());obj.put("ucorpname", clCorpinfo.getUcorpname());obj.put("uparentname", clCorpinfo.getUparentname());if (map.get(clCorpinfo.getUid()) != null) {level++;obj.put("children", getChildrenTree(map, clCorpinfo.getUid(), level));} else {obj.put("children", null);}array.add(obj);}return array;}上面这段戴安只要传入单位集合,接下来会递归来构建我们的单位树,接下来只要前端渲染上去就完事了 。总结其实网上也有很多其它的解决方案,比如用代码实现,也可以用存储过程实现,今天我们使用SQL语句来实现并不一定是最好的办法,虽然简单但是比较难懂,我这边只是给大伙提供一个可行的方案,如果有什么不对的地方请多多指教 。
【MySQL递归查询上下级菜单】
推荐阅读
- 这些 MySQL 调优配置,你都知道吗?
- mysql误删数据恢复
- 生产环境下shell脚本:Mysql数据库备份和Mysql主从同步监控
- Mysql数据库实现主从同步,看这一篇就够了
- 使用mysqld_exporter监控MySQL并展示数据
- Mysql:下载、安装、部署、修改密码步骤
- 搞定MySQL安装难安装贵问题
- MySQL 中 InnoDB 和 MyISAM 的联系与区别
- 秒级搭建MySQL数据库服务,太香了
- Mysql数据备份与恢复
