mysql 递归查询树型结构_MySQL递归查询所有子节点,树形结构查询

--表结构

CREATE TABLE `address` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`code_value` varchar(32) DEFAULT NULL COMMENT ‘区域编码‘,

`name` varchar(128) DEFAULT NULL COMMENT ‘区域名称‘,

`remark` varchar(128) DEFAULT NULL COMMENT ‘说明‘,

`pid` varchar(32) DEFAULT NULL COMMENT ‘pid是code_value‘,

PRIMARY KEY (`id`),

KEY `ix_name` (`name`,`code_value`,`pid`)

) ENGINE=InnoDB AUTO_INCREMENT=1033 DEFAULT CHARSET=utf8 COMMENT=‘行政区域表‘;

--mysql 实现树结构查询

--方法一

CREATE PROCEDURE sp_showChildLst(IN rootId varchar(20))

BEGIN

CREATE TEMPORARY TABLE IF NOT EXISTS tmpLst

(sno int primary key auto_increment,code_value VARCHAR(20),depth int);

DELETE FROM tmpLst;

CALL sp_createChildLst(rootId,0);

select tmpLst.*,address.* from tmpLst,address where tmpLst.code_value=address.code_value order by tmpLst.sno;

END

CREATE PROCEDURE sp_createChildLst(IN rootId varchar(20),IN nDepth INT)

BEGIN

DECLARE done INT DEFAULT 0;

DECLARE b VARCHAR(20);

DECLARE cur1 CURSOR FOR SELECT code_value FROM address where pid=rootId;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

insert into tmpLst values (null,rootId,nDepth);

SET @@max_sp_recursion_depth = 10;

OPEN cur1;

FETCH cur1 INTO b;

WHILE done=0 DO

CALL sp_createChildLst(b,nDepth+1);

FETCH cur1 INTO b;

END WHILE;

CLOSE cur1;

END

--方法二

CREATE PROCEDURE sp_getAddressChild_list(in idd varchar(36))

begin

declare lev int;

set lev=1;

drop table if exists tmp1;

CREATE TABLE tmp1(code_value VARCHAR(36),`name` varchar(50),pid varchar(36) ,levv INT);

INSERT tmp1 SELECT code_value,`name`,pid,1 FROM address WHERE pid=idd;

while row_count()>0

do

set lev=lev+1;

INSERT tmp1 SELECT t.code_value,t.`name`,t.pid,lev from address t join tmp1 a on t.pid=a.code_value AND levv=lev-1;

end while ;

INSERT tmp1 SELECT code_value,`name`,pid,0 FROM address WHERE code_value=idd;

SELECT * FROM tmp1;

end

--方法三

CREATE FUNCTION fn_getAddress_ChildList_test(rootId INT) RETURNS varchar(1000) CHARSET utf8 #rootId为你要查询的节点

BEGIN

#声明两个临时变量

DECLARE temp VARCHAR(1000);

DECLARE tempChd VARCHAR(1000);

SET temp = ‘$‘;

SET tempChd=CAST(rootId AS CHAR);#把rootId强制转换为字符

WHILE tempChd is not null DO

SET temp = CONCAT(temp,‘,‘,tempChd);#循环把所有节点连接成字符串。

SELECT GROUP_CONCAT(code_value) INTO tempChd FROM address where FIND_IN_SET(pid,tempChd)>0;

END WHILE;

RETURN temp;

END

--方法四

CREATE PROCEDURE sp_findAddressChild(iid varchar(50),layer bigint(20))

BEGIN

/*创建接受查询的临时表 */

create temporary table if not exists tmp_table(id varchar(50),code_value varchar(50),name varchar(50),pid VARCHAR(50)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*最高允许递归数*/

SET @@max_sp_recursion_depth = 10 ;

call sp_iterativeAddress(iid,layer);/*核心数据收集*/

select * from tmp_table ;/* 展现 */

drop temporary table if exists tmp_table ;/*删除临时表*/

END

CREATE PROCEDURE sp_iterativeAddress(iid varchar(50),layer bigint(20))

BEGIN

DECLARE t_id INT;

declare t_codeValue varchar(50) default iid ;

declare t_name varchar(50) character set utf8;

declare t_pid varchar(50) character set utf8;

/* 游标定义 */

declare cur1 CURSOR FOR select id,code_value,`name`,pid from address where pid=iid ;

declare CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET t_codeValue = null;

/* 允许递归深度 */

if layer>0 then

OPEN cur1 ;

FETCH cur1 INTO t_id,t_codeValue,t_name,t_pid ;

WHILE ( t_codeValue is not null )

DO

/* 核心数据收集 */

insert into tmp_table values(t_id,t_codeValue,t_name,t_pid);

call sp_iterativeAddress(t_codeValue,layer-1);

FETCH cur1 INTO t_id,t_codeValue,t_name,t_pid ;

END WHILE;

end if;

END

--方法五 SQL实现

SELECT `name`,code_value AS code_value,pid AS 父ID ,levels AS 父到子之间级数, paths AS 父到子路径 FROM (

SELECT `name`,code_value,pid,

@le:= IF (pid = 0 ,0,

IF( LOCATE( CONCAT(‘|‘,pid,‘:‘),@pathlevel) > 0 ,

SUBSTRING_INDEX( SUBSTRING_INDEX(@pathlevel,CONCAT(‘|‘,pid,‘:‘),-1),‘|‘,1) +1

,@le+1) ) levels

, @pathlevel:= CONCAT(@pathlevel,‘|‘,code_value,‘:‘, @le ,‘|‘) pathlevel

, @pathnodes:= IF( pid =0,‘,0‘,

CONCAT_WS(‘,‘,

IF( LOCATE( CONCAT(‘|‘,pid,‘:‘),@pathall) > 0 ,

SUBSTRING_INDEX( SUBSTRING_INDEX(@pathall,CONCAT(‘|‘,pid,‘:‘),-1),‘|‘,1)

,@pathnodes ) ,pid ) )paths

,@pathall:=CONCAT(@pathall,‘|‘,code_value,‘:‘, @pathnodes ,‘|‘) pathall

FROM address,

(SELECT @le:=0,@pathlevel:=‘‘, @pathall:=‘‘,@pathnodes:=‘‘) vv

ORDER BY pid,code_value

) src

ORDER BY pid

原文:http://www.cnblogs.com/zf29506564/p/5588153.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac 右键拷贝文件失效

问题:Mac 右键拷贝文件失效,有时候拷贝可以成功,有时候拷贝不成功 发现问题所在:开了百度翻译的划词, 解决:把划词关掉就好了,或者设置划词快捷键翻译就好了,反正就不要一划就翻译那…

资源官网

卓越亚马逊 Ant, http://ant.apache.org/ Axis2,http://axis.apache.org/axis2/java/core/ DisplayTag, http://www.displaytag.org/1.2/ Eclipse, http://www.eclipse.org/ Maven,http://maven.apache.org/ MyS…

为什么神经网络会把乌龟识别成步枪?现在的 AI 值得信任吗?

来源:36Kr 概要:人工智能的快速发展的确值得欣喜,但快速发展的背后还有各种不完善的地方。 人工智能的快速发展的确值得欣喜,但快速发展的背后还有各种不完善的地方。比如,前不久麻省理工学院的一些学生,利…

mysql 5.7 not null_mysql5.7基础 select...where...is not null 查找不为NULL的内容

礼悟:公恒学思合行悟,尊师重道存感恩。叶见寻根三返一,江河湖海同一体。虚怀若谷良心主,愿行无悔给最苦。读书锻炼养身心,诚劝且行且珍惜。数据、数据,命根就在数据。操作数据库一定要谨慎小心。给最苦 这里…

Struts2自定义标签——示例

自定义Button功能描述&#xff1a; <tangs:button items"apple,orange,banana"/> 解析后为&#xff1a; <input type"button" name"apple" value"apple" /> <input type"button" name"orange…

深度学习的核心:掌握训练数据的方法

来源&#xff1a;云栖社区 概要&#xff1a;今天我们将讨论深度学习中最核心的问题之一&#xff1a;训练数据。 Hello World&#xff01; 今天我们将讨论深度学习中最核心的问题之一&#xff1a;训练数据。深度学习已经在现实世界得到了广泛运用&#xff0c;例如&#xff1a;无…

python停止运行tensorflow_Tensorflow 开启训练后卡死

毕设做深度学习的课题&#xff0c;使用到了TensorFlow&#xff0c;但训练时出现了问题&#xff1a;跑脚本开启训练之后&#xff0c;跑完不到100次就会卡死&#xff0c;然后显示python已停止工作这是我的训练的代码# 导入数据集import load_record# 导入TensorFlow并创建Session…

Struts2自定义标签(template)——示例

来源&#xff1a;http://www.blogjava.net/natlive/archive/2009/05/21/271890.html Struts2 的UITag原理&#xff1a; Struts2 UITag分三部份组成&#xff0c;一部份用于定义Tag的内容与逻辑的UIBean&#xff0c;一部份用于定义JSP Tag&#xff0c;也就是平时我们定义的那种&…

详解5G的六大关键技术

来源&#xff1a;电子产品世界 概要&#xff1a;在5G研发刚起步的情况下&#xff0c;如何建立一套全面的5G关键技术评估指标体系和评估方法&#xff0c;实现客观有效的第三方评估&#xff0c;服务技术与资源管理的发展需要&#xff0c;同样是当前5G技术发展所面临的重要问题。 …

mysql 懒加载数据_jpa如何懒加载大字段,懒加载之后又如何获取懒加载字段

前言&#xff1a;对于大字段&#xff0c;我们在查询列表的时候不需要查询&#xff0c;但是修改的时候有需要展示大字段内容&#xff0c;怎么办问1.jpa如何懒加载大字段&#xff1f;即查询列表的时候不查询出来问2.懒加载之后又如何获取懒加载字段。比如&#xff0c;在后台修改的…

为什么说特斯拉研发自动驾驶AI芯片应该引起注意?

来源&#xff1a;36Kr 概要&#xff1a;对于特斯拉而言&#xff0c;研发这款芯片配套算法本质上还是对率先将自动驾驶汽车商业化节点的争夺。 特斯拉Model 3的量产问题仍未彻底解决&#xff0c;CEO Elon Musk又抛出了自研自动驾驶芯片的重磅新闻。 Elon Musk和特斯拉Autopilo…

displaytag 相关

1、获取某列&#xff08;如&#xff1a; id&#xff09;的值 struts 2: <display:table name"usersInfo" id"tabrow" pagesize"${pageSize}" requestURI"web/sys/userManager/UserQuery.action" class"scroll_its" styl…

stm32usb做虚拟串口和键盘_关于stm32f103的USB虚拟串口程序移植

手边有个项目要用到USB传数据到主机&#xff0c;虽然有很多种方式&#xff0c;但最后还是选择了USB虚拟串口模式&#xff0c;将数据上传至pc端&#xff1b;然而这就涉及到了移植问题&#xff0c;在keil下官方已经给出了一个完整的USB TO VCOM的demo&#xff0c;但在我的主机上装…

4篇Nature同时揭示DNA自组装技术,离人造生命又近了一步

来源&#xff1a;刘盼科学网博客 概要&#xff1a; 科学家一直渴望利用自组装来构建人造物体&#xff0c;以达到细胞或细胞器的尺寸和复杂性&#xff0c;以便为研究&#xff0c;工程和医学应用构建合成的细胞机器。 iNature&#xff1a;自组装过程以各种形式存在于自然界中&…

均方距离计算公式_均值、方差、均方值、均方差计算

1、均值 均值表示信号中直流分量的大小,用E(x)表示。对于高斯白噪声信号而言,它的均值为0,所以它只有交流分量。 2、均值的平方 均值的平方,用{E(x)}^2表示,它表示的是信号中直流分量的功率。 3、均方值 均方值表示信号平方后的均值,用E(x^2)表示。均方值表示信号的平均功…

推动大数据和AI应用场景的落地,加速实现与产业融合。

来源&#xff1a;猎云网 概要&#xff1a;在新时代下&#xff0c;如何利用大数据与人工智能技术&#xff0c;大幅提升数据效率与业务决策&#xff0c;化数据新技术力为业务新能力&#xff0c;化业务新能力为商业新物种&#xff0c;成为各行各业在未来生存下去的关键。 今日&am…

sql无法写入mysql_无法通过写入mysql数据库pandas.to\u sql使用sqlalchemy,但不能通过没有pandas的sqlalchemy...

我正在尝试将数据帧写入MySQL表。这是我的代码&#xff1a;import pandas as pdimport sqlalchemyconnectString"""mysqlpymysql://userName:passWordhostIP/schema"""engine sqlalchemy.create_engine(connnectString)connectionengine.connec…

web.config 指定的默认页失效

web.config 指定的默认页失效 解决方法&#xff1a; IIS 配置如下&#xff1a;

CCF大数据专家委:2018年大数据发展趋势预测

来源&#xff1a;大潘点点 概要&#xff1a;2018年大数据发展趋势预测 1、机器学习继续成为大数据智能分析的核心技术 2、人工智能和脑科学相结合&#xff0c;成为大数据分析领域的热点 3、数据科学带动多学科融合 4、数据学科虽然兴起&#xff0c;但是学科突破进展缓慢 5、推动…