mysql 获得元素的数量_一个递归获取祖先元素值的MySQL函数范例
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函数范例相关推荐
- jquery找祖先包含_jquery如何获取祖先元素
jquery获取祖先元素的方法:使用方法[parent(exp)],取得一个包含着所有匹配元素的唯一父元素的元素集合,代码为[alert($(this).parent().next().html()) ...
- 递归循环一个无限极数组_理解递归、尾调用优化和蹦床函数优化
想要理解递归,您必须先理解递归.开个玩笑罢了, 递归 是一种编程技巧,它可以让函数在不使用 for 或 while 的情况下,使用一个调用自身的函数来实现循环. 例子 1:整数总和 例如,假设我们想要 ...
- mysql连接池源码_一个JAVA数据库连接池实现源码
原文链接:http://www.open-open.com/lib/view/open1410875608164.html // // 一个效果非常不错的JAVA数据库连接池. // from:htt ...
- MySQL 遇到的死锁问_一个罕见的MySQL redo死锁问题排查及解决过程
原标题:一个罕见的MySQL redo死锁问题排查及解决过程 作者:张青林,腾讯云布道师.MySQL架构师,隶属腾讯TEG-基础架构部-CDB内核开发团队,专注于MySQL内核研发&相关架构工 ...
- golang mysql 插入_Mysql学习(一)添加一个新的用户并用golang操作Mysql
Mysql添加一个新的用户并赋予权限 添加一个自己的用户到mysql 首先我们需要先用root用户登录mysql,但是刚安装完没有密码,我们先跳过密码 ailumiyana@ailumiyana:~/ ...
- jq 如何获取和当然元素相同类名的标签_jquery获取兄弟元素-jquery获取下一个兄弟元素-jquery获取最后一个兄弟元素...
jquery怎幺获取当前元素的兄弟元素 可以使用 siblings() jquery既然有next方法取得下一个元素,那幺有previous方法吗 $("#id").prev(); ...
- mysql存储家庭成员信息_家谱管理系统的设计与实现(MyEclipse,MySQL)
家谱管理系统的设计与实现(MyEclipse,MySQL)(任务书,开题报告,中期检查表,文献综述,毕业论文16700字,程序代码,MySQL数据库,答辩PPT) 家谱是现代人们怀旧的重要部分,因此, ...
- python 随机获取列表的元素_练习 34 - 获取列表元素 - Learn Python 3 The Hard Way
练习 34 获取列表元素 列表(list)真的非常有用,前提是你要能获取到它们里面的内容.你已经能够按顺序遍历列表中的元素,但是如果你要取其中的第5个元素,你该怎么操操做?你需要知道如何获取一个列表里 ...
- python列表元素都加倍_关于python列表增加元素的三种操作方法
关于python列表增加元素的三种操作方法 1.insert方法,该方法包含两个参数,第一个参数为插入的位置参数,第二个参数为插入内容 a = [0,0,0] b = [1,2,3] a.insert ...
最新文章
- c 自定义实现string类 clear_基于scala2.13实现自定义的集合类 (下)
- 【论文写作分析】之一 《基于混合注意力Seq2seq模型的选项多标签分类》
- 【c语言】输入天数,求这天是全年的第几周的第几天
- 使用__doPostBack函数回送表单.
- 微信和支付宝支付模式详解及实现(.Net标准库)
- HeadFirst设计模式(四) - 工厂模式之1 - 简单工厂
- ireport导出pdf后中文字符全部不显示(已解决)
- MTK和高通展讯他们平台的主要区别是什么
- Bootstrap网格系统(Grid System)
- 如何开发一款高大上的android应用的必备知识
- Android 手机 超级终端命令解析
- 中国房地产总市值与GDP的比例
- 2020年东三省数学建模联赛(辽宁赛区)获奖名单
- 如何使用python实现翻转英文句子的单词顺序
- 手机测试wifi的延迟的软件,六款最佳、免费的网络延迟测试工具
- 服务器版博客系统、前后端交互1
- 生活-女生的正确生活方式
- 供水为民振兴乡村 国稻种芯-慈利县:抗旱保收盛德村在行动
- 聚类分析在用户行为中的实例_聚类分析案例之市场细分
- mycat启动报错:but failed to start(个例)