前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sql返回指定节点的树形结构数据

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

作者头像
用户5166330
发布2019-04-16 17:13:46
2.5K0
发布2019-04-16 17:13:46
举报
文章被收录于专栏:帅哥哥写代码帅哥哥写代码
背景

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

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

正文

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

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

代码语言:javascript
复制
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。

结语

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 正文
  • 知识点
  • FIND_IN_SET函数
  • 结语
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档