test.sql:-- 创建测试数据 drop table if exists T1; CREATE TABLE T1 ( id bigint NOT NULL auto_increment, pid bigint,

test.sql:-- 创建测试数据

drop table if exists T1;

CREATE TABLE T1 (

id bigint NOT NULL auto_increment,

pid bigint,

code varchar(255),

PRIMARY KEY (id)

);

insert into t1(id,pid,code) values(1,null,'1');

insert into t1(id,pid,code) values(2,null,'2');

insert into t1(id,pid,code) values(3,1,'1.1');

insert into t1(id,pid,code) values(4,1,'1.2');

insert into t1(id,pid,code) values(5,2,'2.1');

insert into t1(id,pid,code) values(6,3,'1.1.1');

select * from t1 order by code;

-- 定义递归处理函数:获取祖先的id和code,并用符号'/'按序连接,id和code间用';'连接

DELIMITER $$

DROP FUNCTION IF EXISTS getAncestors $$

CREATE FUNCTION getAncestors(id bigint) RETURNS VARCHAR(1000)

BEGIN

DECLARE done INT DEFAULT 0;

DECLARE r VARCHAR(1000);

DECLARE ri VARCHAR(1000);

DECLARE rc VARCHAR(1000);

DECLARE lev int;

DECLARE cid bigint;

DECLARE pid bigint;

DECLARE pcode VARCHAR(255);

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

SET cid = id;

SET lev = 0;

SET ri = '';

SET rc = '';

REPEAT

SELECT p.id,p.code into pid,pcode FROM T1 c inner join T1 p on p.id=c.pid where c.id=cid;

IF NOT done THEN

SET cid = pid;

if length(ri) > 0 then

SET ri = concat(cast(pid as char),'/',ri);

SET rc = concat(cast(pid as char),'/',rc);

else

SET ri= cast(pid as char);

SET rc= pcode;

end if;

END IF;

UNTIL done END REPEAT;

if length(ri) > 0 then

SET r = concat(ri,';',rc);

else

SET r = null;

end if;

RETURN r;

END $$

DELIMITER ;

-- 返回:null;

select getAncestors(1);

-- 返回:'1;1';

select getAncestors(3);

-- 返回:'1/3;1/1.1';

select getAncestors(6);

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

mysql 获得元素的数量_一个递归获取祖先元素值的MySQL函数范例相关推荐

  1. jquery找祖先包含_jquery如何获取祖先元素

    jquery获取祖先元素的方法:使用方法[parent(exp)],取得一个包含着所有匹配元素的唯一父元素的元素集合,代码为[alert($(this).parent().next().html()) ...

  2. 递归循环一个无限极数组_理解递归、尾调用优化和蹦床函数优化

    想要理解递归,您必须先理解递归.开个玩笑罢了, 递归 是一种编程技巧,它可以让函数在不使用 for 或 while 的情况下,使用一个调用自身的函数来实现循环. 例子 1:整数总和 例如,假设我们想要 ...

  3. mysql连接池源码_一个JAVA数据库连接池实现源码

    原文链接:http://www.open-open.com/lib/view/open1410875608164.html // // 一个效果非常不错的JAVA数据库连接池. // from:htt ...

  4. MySQL 遇到的死锁问_一个罕见的MySQL redo死锁问题排查及解决过程

    原标题:一个罕见的MySQL redo死锁问题排查及解决过程 作者:张青林,腾讯云布道师.MySQL架构师,隶属腾讯TEG-基础架构部-CDB内核开发团队,专注于MySQL内核研发&相关架构工 ...

  5. golang mysql 插入_Mysql学习(一)添加一个新的用户并用golang操作Mysql

    Mysql添加一个新的用户并赋予权限 添加一个自己的用户到mysql 首先我们需要先用root用户登录mysql,但是刚安装完没有密码,我们先跳过密码 ailumiyana@ailumiyana:~/ ...

  6. jq 如何获取和当然元素相同类名的标签_jquery获取兄弟元素-jquery获取下一个兄弟元素-jquery获取最后一个兄弟元素...

    jquery怎幺获取当前元素的兄弟元素 可以使用 siblings() jquery既然有next方法取得下一个元素,那幺有previous方法吗 $("#id").prev(); ...

  7. mysql存储家庭成员信息_家谱管理系统的设计与实现(MyEclipse,MySQL)

    家谱管理系统的设计与实现(MyEclipse,MySQL)(任务书,开题报告,中期检查表,文献综述,毕业论文16700字,程序代码,MySQL数据库,答辩PPT) 家谱是现代人们怀旧的重要部分,因此, ...

  8. python 随机获取列表的元素_练习 34 - 获取列表元素 - Learn Python 3 The Hard Way

    练习 34 获取列表元素 列表(list)真的非常有用,前提是你要能获取到它们里面的内容.你已经能够按顺序遍历列表中的元素,但是如果你要取其中的第5个元素,你该怎么操操做?你需要知道如何获取一个列表里 ...

  9. python列表元素都加倍_关于python列表增加元素的三种操作方法

    关于python列表增加元素的三种操作方法 1.insert方法,该方法包含两个参数,第一个参数为插入的位置参数,第二个参数为插入内容 a = [0,0,0] b = [1,2,3] a.insert ...

最新文章

  1. c 自定义实现string类 clear_基于scala2.13实现自定义的集合类 (下)
  2. 【论文写作分析】之一 《基于混合注意力Seq2seq模型的选项多标签分类》
  3. 【c语言】输入天数,求这天是全年的第几周的第几天
  4. 使用__doPostBack函数回送表单.
  5. 微信和支付宝支付模式详解及实现(.Net标准库)
  6. HeadFirst设计模式(四) - 工厂模式之1 - 简单工厂
  7. ireport导出pdf后中文字符全部不显示(已解决)
  8. MTK和高通展讯他们平台的主要区别是什么
  9. Bootstrap网格系统(Grid System)
  10. 如何开发一款高大上的android应用的必备知识
  11. Android 手机 超级终端命令解析
  12. 中国房地产总市值与GDP的比例
  13. 2020年东三省数学建模联赛(辽宁赛区)获奖名单
  14. 如何使用python实现翻转英文句子的单词顺序
  15. 手机测试wifi的延迟的软件,六款最佳、免费的网络延迟测试工具
  16. 服务器版博客系统、前后端交互1
  17. 生活-女生的正确生活方式
  18. 供水为民振兴乡村 国稻种芯-慈利县:抗旱保收盛德村在行动
  19. 聚类分析在用户行为中的实例_聚类分析案例之市场细分
  20. mycat启动报错:but failed to start(个例)

热门文章

  1. vb中msgbox函数用法
  2. vlan与vxlan
  3. 2020java面试题,找不到工作来找我(二)
  4. Spring 注解 http://qzone.qq.com/blog/55357655-1232078233
  5. 求推荐一款带日历的电脑桌面记事便签
  6. 多人共享协作画板——单机画板
  7. Exchange 2016 -KB5000871安全补丁更新沥血排坑路
  8. linux 硬盘分区
  9. 妙语佳句 In English
  10. 顶会速递 | ICLR 2020录用论文全集