背 景:

在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度, 那么所有节点为根的树的深度均不会超过树的最大深度,则我们可以直接通过left join来实现。

但很多时候我们是无法控制或者是知道树的深度的。这时就需要在MySQL中用存储过程(函数)来实现或者在程序中使用递归来实现。本文讨论在MySQL中使用函数来实现的方法:

一、环境准备

1、建表

 CREATE TABLE `table_name`  (
   `id` ) NOT NULL AUTO_INCREMENT,
   `status` ) NULL DEFAULT NULL,
   `pid` ) NULL DEFAULT NULL,
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE  CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

2、插入数据

 , , );
 , , );
 , , );
 , , );
 , , );
 , , );
 , , );
 , , );
 , , );
 , , );
 , , );

二、MySQL函数的编写

1、查询当前节点的所有父级节点

 delimiter //
 CREATE FUNCTION `getParentList`(root_id BIGINT)
      )
      BEGIN
           ;
         ;
         ) DEFAULT '$';
          DO
               SET fid=(SELECT pid FROM table_name WHERE root_id=id);
                THEN
                   SET str = concat(str,',',fid);
                   SET root_id = fid;
               ELSE
                   SET root_id=fid;
               END IF;
      END WHILE;
    RETURN str;
  END  //
  delimiter ;

2、查询当前节点的所有子节点

  delimiter //
  CREATE FUNCTION `getChildList`(root_id BIGINT)
      )
      BEGIN
        ) ;
        ) ;
        DECLARE k INT DEFAULT 0;
        SET str = '$';
                WHILE cid IS NOT NULL DO
                  THEN
                   SET str = CONCAT(str,',',cid);
                 END IF;
                 ;
                 ;
        END WHILE;
        RETURN str;
 END //
 delimiter ;

三、测试

1、获取当前节点的所有父级

);

2、获取当前节点的所有字节

);

本文完......

MySQL通过自定义函数实现递归查询父级ID或者子级ID的更多相关文章

  1. Mysql - 存储过程/自定义函数

    在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...

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

    mysql创建自定义函数与存储过程 一 创建自定义函数 在使用mysql的过程中,mysql自带的函数可能不能完成我们的业务需求,这时就需要自定义函数,例如笔者在开发过程中遇到下面这个问题 mysql ...

  3. navicat与phpmyadmin做mysql的自定义函数和事件

    自定义函数和事件是mysql一个很方便的功能,navicat在5.1以上版本就支持了自定义函数和事件,phpmyadmim不清楚. 用这个是由于一些简单的事情,没有必要去做一个服务器计划使用 接下来我 ...

  4. 128_Power BI父级排名TOPN子级动态展示

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前些天在和朋友交流Power BI中有这样一个需求,按照父级排名后,需要显示出父级TOPN的子级明细. 如下&l ...

  5. MySQL(六) —— 自定义函数

    自定义函数 用户自定义函数(user-defined function, UDF)是一种对MySQL扩展的途径,其用法与内置函数相同. 参数,返回值 创建自定义函数 CREATE FUNCTION f ...

  6. MySQL之自定义函数

    引言 MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利,比如我前面提到过的聚合函数SUM().AVG()以及日期时间函数等等,可是我们总会出现其他的需求:我们需要 ...

  7. MySQL 创建自定义函数

    语法:Create function function_name(参数列表)returns返回值类型 函数体 函数名,应合法的标识符,不应与系统关键字冲突. 一个函数应该属于某个数据库,可以使用db_ ...

  8. mysql增加自定义函数功能

    mysql默认是不能自定义函数的 当create function时 This function has none of DETERMINISTIC, NO SQL, or READS SQL DAT ...

  9. MySQL 创建自定义函数(1)

    1. 创建测试自定义函数(1) CREATE DEFINER=`dbdh`@`localhost` FUNCTION `test`.`sp_function_dbdh_three`() RETURNS ...

随机推荐

  1. Vue + Js 面试宝典

    https://github.com/rohan-paul/Awesome-JavaScript-Interviewshttps://github.com/nieyafei/front-end-int ...

  2. 最近学到的ABTest知识

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 如果之前看过我文章的同学就知道我在工作中搞的是推送系 ...

  3. 【MongoDB详细使用教程】五、MongoDB的数据库管理

    目录 1.数据库安全 1.1.创建管理员账号和密码 1.2.设置服务状态为需要验证用户 1.3.创建用户账户和密码 1.4.忘记密码/修改密码 2.主从服务器 2.1.创建服务器目录,用于分别存放主从 ...

  4. SQL common keywords examples and tricks

    Case Sensitive Check 1. Return names contain upper case Select id, name from A where name<>low ...

  5. 解决Dubbo 2.7.3版本使用ConfigCenterConfig集成Apollo No Provider found的问题

    Dubbo 2.7.3 集成Apollo 问题描述 Dubbo 2.7.3支持配置中心外部化配置, 因此只需要定义一个ConfigCenterConfig的Bean. @EnableDubbo(sca ...

  6. 如何在python文件中测试sql语句

    在manage.py的同级目录下新建一个run.py import os if __name__ == '__main__': #加载Django项目的配置信息 os.environ.setdefau ...

  7. .NET如何写正确的“抽奖”——打乱数组算法

    .NET如何写正确的"抽奖"--数组乱序算法 数组乱序算法常用于抽奖等生成临时数据操作.就拿年会抽奖来说,如果你的算法有任何瑕疵,造成了任何不公平,在年会现场code review ...

  8. 我的第一个Python爬虫——谈心得

    2019年3月27日,继开学到现在以来,开了软件工程和信息系统设计,想来想去也没什么好的题目,干脆就想弄一个实用点的,于是产生了做“学生服务系统”想法.相信各大高校应该都有本校APP或超级课程表之类的 ...

  9. 面向对象的7个设计原则->开车理解->贴近生活

    设计模式在我们的开发中是不可或缺的一部分,很多人会说,我没用那些设计模式啊,我也开发的挺好的,其实不然,我们在开发中都用到了这些设计模式,只不过我们并没有在意这些,今天我就用开车的方法来解释一下我们的 ...

  10. vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案

    # vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案 最近做项目发现一个问题,页面每次刷新后加载速度都非常慢,20s左右,在开发环境则非常流畅,几乎感觉不到,本文参考望山的各种方案优化 1,关闭打 ...