父子类树tree的关系,比如部门层次结构,菜单结构,可能我们更改了一级的数据,下面的所有子类以及子孙类都需要更改,

可以自定义mysql函数,进行查询出先关联数据,递归查询:

创建测试表:

CREATE TABLE `test1` (
  `id` int(32) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `age` int(10) DEFAULT NULL,
  `parent_id` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
加入sql语句:

INSERT INTO `mytest`.`test1` (`id`, `name`, `age`, `parent_id`) VALUES ('1', '张三', '23', NULL);
INSERT INTO `mytest`.`test1` (`id`, `name`, `age`, `parent_id`) VALUES ('2', '李四', '24', '1');
INSERT INTO `mytest`.`test1` (`id`, `name`, `age`, `parent_id`) VALUES ('3', '王五', '25', '2');
INSERT INTO `mytest`.`test1` (`id`, `name`, `age`, `parent_id`) VALUES ('4', '赵六', '26', '3');
INSERT INTO `mytest`.`test1` (`id`, `name`, `age`, `parent_id`) VALUES ('5', '钱七', '27', '4');
INSERT INTO `mytest`.`test1` (`id`, `name`, `age`, `parent_id`) VALUES ('6', '王八', '28', '5');
准备工作完成:

使用mysql创建、调用存储过程,函数以及触发器的时候会有错误符号为1418错误!

设置log_bin_trust_routine_creators全局系统变量为1。我是在客户端上执行SET GLOBAL log_bin_trust_function_creators = 1;

当然还有其他解决办法eg:函数加DETERMINISTIC字段等,我这就不提了,可百度mysql报1418错误即可

1:向下递归:

DROP FUNCTION IF EXISTS queryChildrenIsDown;
CREATE FUNCTION queryChildrenIsDown(paramId INT)
RETURNS VARCHAR(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000);
SET sTemp='$';
SET sTempChd = CAST(paramId AS CHAR);
WHILE sTempChd IS NOT NULL DO
SET sTemp= CONCAT(sTemp,',',sTempChd);
SELECT GROUP_CONCAT(id) INTO sTempChd FROM test1 WHERE FIND_IN_SET(parent_id,sTempChd)>0;
END WHILE;
RETURN sTemp;
END

2:向上递归

DROP FUNCTION IF EXISTS queryChildrenByUp;
CREATE FUNCTION queryChildrenByUp(paramId INT)
RETURNS VARCHAR(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000);
SET sTemp='$';
SET sTempChd = CAST(paramId AS CHAR);
SET sTemp = CONCAT(sTemp,',',sTempChd);
SELECT parent_id INTO sTempChd FROM test1 WHERE id = sTempChd;
WHILE sTempChd <> 0 DO
SET sTemp = CONCAT(sTemp,',',sTempChd);
SELECT parent_id INTO sTempChd FROM test1 WHERE id = sTempChd;
END WHILE;
RETURN sTemp;
END

除此之外,也可以写些其他的查询函数:

eg:

BEGIN  
    RETURN(SELECT CONCAT('employee name:',name,'---','id: ',id) FROM test1 WHERE parent_id=id);  
END

Mysql递归查询(通过自定义函数,实现父子类关系查询)相关推荐

  1. mysql存储过程和自定义函数

    2019独角兽企业重金招聘Python工程师标准>>> 存储过程简介 SQL语句需要先编辑后执行,而存储过程是一组为了完成特定功能的SQL语句集,经编译后存储过程在数据库中,用户通过 ...

  2. mysql存储过程与自定义函数

    2019独角兽企业重金招聘Python工程师标准>>> #mysql存储过程与自定义函数: delimiter $ 1.最简单的存储过程 create procedure test( ...

  3. MySQL学习笔记—自定义函数

    MySQL学习笔记-自定义函数 注释语法: MySQL服务器支持3种注释风格: 从'#'字符从行尾. 从'– '序列到行尾.请注意'– '(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如 ...

  4. oracle迁移mysql视图中函数问题,mysql中to_char自定义函数。

    迁移到mysql中会遇到函数迁移问题,我们可以自定义函数 DELIMITER $$ CREATE FUNCTION new_data_report.to_char(Intnumber int) RET ...

  5. mysql 8.0 自定义函数_PHP+Mysql防止SQL注入的方法(life)

    这篇文章介绍的内容是关于PHP+Mysql防止SQL注入的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 我的官方群点击此处. 方法一: mysql_real_escape_str ...

  6. mysql 如何创建自定义函数

    mysql创建一个函数 delimiter $$ create function 函数名字() returns 返回值类型 begin 函数体- return 返回值(注意类型必须和上面的一样) en ...

  7. mysql存储过程和自定义函数_MySQL存储过程/存储过程与自定义函数的区别

    语法: 创建存储过程: CREATE[definer = {user|current_user}] PROCEDURE sp_name ([ proc_parameter [,proc_paramet ...

  8. mysql工作日_mysql自定义函数计算时间段内的工作日(支持跨年)

    ① 同一年的情况下计算工作日函数 CREATE DEFINER=`root`@`%` FUNCTION `WORKDAYSONEYEAR`(`datefrom` datetime,`dateto` d ...

  9. mysql 经纬度距离 自定义函数_mysql 经纬度计算距离 自定义函数

    这些经纬线是怎样定出来的呢? 地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作&quo ...

最新文章

  1. 程序员春节必备金句,简直不能再机智!
  2. 构建高可靠hadoop集群之0-hadoop用户向导
  3. JVM04内存结构概述
  4. helloworld:一个完整的WCF案例
  5. 二级计算机vf题型,计算机二级VF题型有哪些?
  6. 汽车CAN总线-基础
  7. bing 搜索引擎 无法访问 bug
  8. FastDFS文件服务器升级内置nginx版本
  9. 360漏洞修复的提取
  10. 企业数据防泄漏解决方案分享
  11. 河南工学院计算机宿舍,河南工学院宿舍条件,宿舍几人间环境好不好(图片)
  12. Excel下拉菜单如何制作?
  13. RAD Studio 11.X Alexandria release有何新的改变及改变实务
  14. 惊闻女程序员公开举报:摩拜单车前端组 leader 性骚扰下属!
  15. LIB,DLL区别 及 QT中如何添加LIB,DLL
  16. python按按钮变颜色_当按钮单击时更改按钮颜色
  17. 选择vray Next for SketchUp创建具启发性的、逼真的渲染的8大理由!
  18. 电子签名能用到哪些格式上
  19. 员工试用期转正申请书(潍柴重庆汽车)
  20. 企业如何在组织架构改变时,来实现员工的人岗匹配

热门文章

  1. 【重磅】掌众金服创始人张敬华受邀担任LinkEye顾问
  2. uview 瀑布流_RecyclerView 瀑布流布局
  3. 影视电影网站赚钱吗?个人的分享
  4. oracle认证方式分为操作系统认证和…
  5. MAD,现代安卓开发技术:Android 领域开发方式的重大变革~
  6. 使用jQuery控制单选框的默认值的选中方式
  7. Burpsuite安装教程
  8. vue mixins 混入
  9. 微信小程序开发笔记⑤——事件、音频(音乐)组件、movable-area组件和cover-view组件
  10. 解决Visio流程图在Word中无法显示以及显示不完全的问题