美文网首页程序员的日常记忆MySQL数据库
sql返回指定节点的树形结构数据

sql返回指定节点的树形结构数据

作者: 一名程序猿 | 来源:发表于2018-11-16 22:45 被阅读277次
背景

就是有这么一个需求,返回指定组织下的组织机构,以及所在该组织机构下的人。(用sql)
简单描述就是如下:

请叫我树形图
使用sql,返回部门1以及其子部门数据
很明显就是一个树形递归嘛,用代码就比较好实现。
但是要用sql实现,就稍微麻烦点。
正文

创建符合上述思维导图的表department,如下图:

请叫我数据表
我就不按网上百度的sql树形递归的思路讲了。我也去百度了,感觉一大扒拉,又不想看。我又想按代码递归的思路写,总感觉有点不对。于是乎,就用了最正常,最直接的方式去完成这一任务。
比如,我想知道部门1有哪些孩子,只需要parent_id等于部门1的id。想知道部门11有哪些孩子,只需要知道parent_id等于部门11的id。
所以最后我采用的是循环的方式。
sql存储过程如下
DROP PROCEDURE
IF EXISTS get_part_department;

CREATE PROCEDURE get_part_department ()
BEGIN
  SELECT
      group_concat(id) INTO @ids
  FROM
      department
  WHERE
      parent_id = '2';

SELECT
  GROUP_CONCAT(id) INTO @temps
FROM
  department
WHERE
  find_in_set(parent_id, @ids);


SET @alls = CONCAT_WS(',' ,@ids ,@temps);


REPEAT
  SELECT
      GROUP_CONCAT(id) INTO @temps
  FROM
      department
  WHERE
      find_in_set(parent_id, @temps);


SET @alls = CONCAT_WS(',' ,@alls ,@temps);

UNTIL @temps IS NULL
END
REPEAT
;

SELECT
  *
FROM
  department
WHERE
  FIND_IN_SET(id ,@alls)
OR FIND_IN_SET(parent_id ,@alls)
OR id = 2;


END

执行结果如下:


返回指定节点以及其下子节点数据

到此,本文需求功能已实现。

知识点

1.数据库是mysql,所用的函数也是mysql的函数。
2.@ids会话变量的使用
3.repeat.....until循环使用(与其他循环的方式区别)
4.GROUP_CONCAT,CONCAT_WS拼接字符串的使用
5.FIND_IN_SET函数的使用

FIND_IN_SET函数

FIND_IN_SET着重讲一哈,因为这也是我第一次使用。

FIND_IN_SET(str,strlist)
假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。一个字符串列表就是一个由一些被‘,'符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。

结语

不积跬步无以至千里。觉得不错,记得点亮小星星。

相关文章

  • sql返回指定节点的树形结构数据

    背景 就是有这么一个需求,返回指定组织下的组织机构,以及所在该组织机构下的人。(用sql)简单描述就是如下:请叫我...

  • 树形结构数据中实用的方法

    预设:树形结构数据树形为value、children、label 格式化树形数据 获取当前节点下所有子节点 查找目...

  • json杂记

    18.7.221、返回属性结构,只要构建真正的树形结构,然后返回即可。@responseBody会将各种数据结构按...

  • Zookeeper数据模型及作用

    数据模型 树形结构 每个节点是ZNode: Zookeeper数据模型中的数据单元,称作数据节点(ZNode),有...

  • Java后端返回树型数据

    前端有时需要展示部门树,城市树,人员树等树形结构,这时后端返回的数据需要经过一定的加工。 1. 树结构的节点,设置...

  • 分布式协调服务Zookeeper

    Zookeeper数据模型 树形结构,类似文档系统的目录 zk的数据存贮基于节点,这种节点叫做Znode,Znod...

  • 树形组件拖拽写法思路

    树形结构的生成,可以通过递归树形数据遍历而成 节点的思路 children-container 需要加个paddi...

  • vue 菜单路由权限

    实现思路 通过一个 uid 请求后端路由权限接口 后端返回对应的路由权限给前端 json 转树形结构 树形结构数据...

  • 第10章 - DOM

    DOM 就是文档的数据结构,它提供了操作文档的编程接口 API。 10.1 节点层次 文档是由节点组成的树形结构,...

  • 数据处理-返回树形结构

    相关业务:多级菜单、地区树、资源树等 实现原理:构建出业务相关的树对象,将数据库查询出的业务数据组装成树对象列表,...

网友评论

    本文标题:sql返回指定节点的树形结构数据

    本文链接:https://www.haomeiwen.com/subject/xupmfqtx.html