【需求】某用户只能查看其自己信息及其下级信息,涉及通过该用户所在部门获取其下所有部门(多层)id集合。

步骤一:对数据库进行设置:

set global log_bin_trust_function_creators=TRUE;

 可以在Navicate点击工具栏的【工具】-> 【命令行界面】执行以上语句;也可以在服务器上进入数据库执行。

步骤二:执行以下sql语句,生成sql方法。

(1)需求一,获取父级及子级id:

CREATE FUNCTION `getChildList`(`rootId` VARCHAR(32)) RETURNS varchar(4000) CHARSET utf8
BEGINDECLARE sTemp VARCHAR(4000);DECLARE sTempChd VARCHAR(4000);DECLARE count INT DEFAULT 0;SET sTemp = '';-- 返回值SET sTempChd =cast(rootId as CHAR); -- 父id-- 判断父id是否存在SET count=(SELECT count(1) from sys_dept WHERE Id=rootId);IF count>0 THEN-- 遍历拼接所有子节点idWHILE sTempChd is not null DOSET sTemp = concat(sTemp,',',sTempChd);SELECT group_concat(Id) INTO sTempChd FROM sys_dept where FIND_IN_SET(Parent_Id,sTempChd)>0;END WHILE;-- 剔除拼接后多余的第一个逗号SET sTemp = (SELECT TRIM(LEADING ',' FROM sTemp));END IF;RETURN sTemp;
END

(2)需求二,仅获取所有子级id:

CREATE FUNCTION `getChildList`(`rootId` VARCHAR(32)) RETURNS varchar(4000) CHARSET utf8
BEGINDECLARE sTemp VARCHAR(4000);DECLARE sTempChd VARCHAR(4000);DECLARE count INT DEFAULT 0;SET sTemp = '';-- 返回值SET sTempChd =cast(rootId as CHAR); -- 父id-- 判断父id是否存在SET count=(SELECT count(1) from sys_dept WHERE Id=rootId);IF count>0 THEN-- 遍历拼接所有子节点idWHILE sTempChd is not null DOSET sTemp = concat(sTemp,',',sTempChd);SELECT group_concat(Id) INTO sTempChd FROM sys_dept where FIND_IN_SET(Parent_Id,sTempChd)>0;END WHILE;-- 剔除拼接后父级id及第一个多余的逗号SET sTemp = (select substring(sTemp, LENGTH(SUBSTRING_INDEX(sTemp,",",2))+2));END IF;RETURN sTemp;
END

测试:

解释:为什么需要步骤一的配置?

如果不配置的话,该函数在生成的时候会报错。

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) 

报错原因:

这是我们开启了bin-log, 我们就必须指定我们的函数是否是

1 DETERMINISTIC 不确定的

2 NO SQL 没有SQl语句,当然也不会修改数据

3 READS SQL DATA 只是读取数据,当然也不会修改数据

4 MODIFIES SQL DATA 要修改数据

5 CONTAINS SQL 包含了SQL语句

其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。

转载于:https://www.cnblogs.com/yangyuke1994/p/9699269.html

通过父级id获取到其下所有子级(无穷级)——Mysql函数实现相关推荐

  1. 子标签获取父级Id值

    子标签获取父级id值 1.首先,通过子标签传递,使用"this": 2.function获取所传递的值: 代码如下 标签中(id = "show1") oncl ...

  2. vue如何获取tree当前选中的节点_vue中element-ui 树形控件-树节点的选择(选中当前节点,获取当前id并且获取其父级id)...

    出处: Element-ui官网给的方法 getCheckedKeys() { console.log(this.$refs.tree.getCheckedKeys()); }, 1 这种只有在所有子 ...

  3. php 根据父级id查出,php,_三级分类 like查询 查询到很多id 需要找到对应的父级id 并根据父级id组合 应该怎么根据父级id将数据组合在一起呢?,php - phpStudy...

    三级分类 like查询 查询到很多id 需要找到对应的父级id 并根据父级id组合 应该怎么根据父级id将数据组合在一起呢? 这是获取到的数据 父级id为parent_id Array ( [0] = ...

  4. elementui tree获取父节点_vue_elementUI_ tree树形控件 获取选中的父节点ID

    一,  vue_elementUI_ tree树形控件 1.1默认点击tree节点的第一个(注意不是checked选中) :expand-on-click-node="false" ...

  5. vue 子级拿值_Vue 父组件主动获取子组件的值,子组件主动获取父组件的值

    父组件主动获取子组件的值 1. 在调用子组件的时候定义一个ref-> ref="header" 2. 在父组件中通过this.$refs.header.属性,调用子组件的属性 ...

  6. vue怎么根据id获取组件_vue子组件,如何根据父组件传进来的id,去查询详情,并在子组件中显示?...

    如果我在组件的created方法里面,根据id去后台查询详情,可以正常显示,不报错,但是当父组件id值改变后,并不会再次去后台查询了, ,假如我后台返回的对象时detail,如果写在computed里 ...

  7. Element ui tree树形控件获取当前节点id和父节点id

    低版本Element ui tree树形控件获取当前节点id和父节点id的方法:点击查看 最新版本Element ui tree树形控件获取当前节点id和父节点id教程: 1.找到node_modul ...

  8. class 原生js获取父元素_JS获取节点的兄弟,父级,子级元素的方法

    先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比. JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素 原生的J ...

  9. jquery 获取父页面Id 值

    jquery 获取父页面Id 值 $('#id', parent.document).val();

最新文章

  1. 五分钟部署一台vCenter Server 5.0 -- vCSA问与答
  2. IE浏览器下ajax缓存导致数据不更新的解决方法
  3. 【收藏】goland报错:报错package xxx is not in GOROOT or GOPATH 或者 cannot find package “xxx“ in any of
  4. C语言和其他语言的不得不说的差别!
  5. 矩池云上安装yolov5并测试
  6. java 调用 .net dll_c# – 如何从Java调用.NET dll
  7. 基于深度学习的自动化行人检测和监控系统
  8. 居家隔离的第5天,我们整了个六边形战士
  9. 使用js一行代码解决上网培训弹窗问题
  10. SQL岗位30个面试题,SQL面试问题及答案
  11. 【量化课堂】风险模型
  12. 分享一个用了很久的免费国外空间,适合用于测试
  13. 1.国民技术N32G45X例程之-串口打印
  14. java基于微信小程序的共享单车电动车租赁系统 uniapp 小程序
  15. 前端页面与form表单提交:代码分享
  16. python人名最多统计_Python统计字符串中出现次数最多的人名
  17. 被大厂卡学历该如何自救?
  18. fedora 17 Upan
  19. rt-thread中webclient使用
  20. CMMI评估EPG问答

热门文章

  1. 仙人掌之歌——上线运营(5)
  2. 【Oracle 数据库】奶妈式教程 day11 数值函数
  3. JS中var和let的区别
  4. PCB钻孔工艺故障及解决办法
  5. 『不走弯路』Unity学习路线(主程方向)
  6. 联想服务器rd650性能,澎湃性能为云创新:联想ThinkServer RD550/650新品发布
  7. android加入摄像功能,Android Camera使用之录像功能
  8. 程序员如何坚持学计算机英语
  9. 如何让打开mysql数据库
  10. seo网站优化中“四处一词”重要细节