mysql存储过程递归调用产生树数据 使用finereport的树下拉框时,要求提供有层次结构的数据。例如:一级001,二级001001,三级001001001 等。而我们一般的递归表是这样的,定义一个id和一个pid,id和pid在长度上没有父子关系。这样的数据,finereport是不认的。

mysql存储过程递归调用产生树数据

使用finereport的树下拉框时,要求提供有层次结构的数据。例如:一级001,二级001001,三级001001001 等。而我们一般的递归表是这样的,定义一个id和一个pid,id和pid在长度上没有父子关系。这样的数据,finereport是不认的。故只能通过存储过程进行转换。

代码如下:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for `t_tlm_tree`

-- ----------------------------

DROP TABLE IF EXISTS `t_tlm_tree`;

CREATE TABLE `t_tlm_tree` (

`id` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '0' ,

`pid` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL ,

`nodename` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL ,

`fast` int(11) NULL DEFAULT NULL ,

PRIMARY KEY (`id`)

)

ENGINE=InnoDB

DEFAULT CHARACTER SET=utf8 COLLATE=utf8_unicode_ci

;

-- ----------------------------

-- Records of t_tlm_tree

-- ----------------------------

BEGIN;

INSERT INTO `t_tlm_tree` VALUES ('10000', '-1', '中国', '1'), ('10001', '10000', '浙江', '1'), ('10002', '10000', '河南', '1'), ('10003', '10001', '杭州', '1'), ('10004', '10001', '温州', '1'), ('10005', '10002', '郑州', '1'), ('10006', '10002', '信阳', '1'), ('10007', '10006', '息县', '1'), ('10008', '10003', '滨江', '1'), ('10009', '10003', '西湖', '1'), ('10010', '10003', '上城', '1'), ('10011', '10006', '罗山', '1');

COMMIT;

-- ----------------------------

-- Procedure structure for `p_create_tree_node`

-- ----------------------------

DROP PROCEDURE IF EXISTS `p_create_tree_node`;

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_create_tree_node`(IN `in_pid` varchar(100))

BEGIN

DECLARE v_has_child INT default 0;

DECLARE v_rows INT default 0;

DECLARE v_id VARCHAR(100) default '';

DECLARE v_pid VARCHAR(100) default '';

DECLARE v_nodename VARCHAR(100) default '';

DECLARE v_tree_id VARCHAR(100) default '';

DECLARE v_tree_pid VARCHAR(100) default '';

DECLARE v_done INT default 0;

DECLARE v_cur CURSOR FOR SELECT id,pid,nodename from t_tlm_tree where `fast`=1 and pid=in_pid;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done=1;

SET @@max_sp_recursion_depth = 100;

OPEN v_cur;

loop_tag:LOOP

FETCH v_cur INTO v_id,v_pid,v_nodename;

IF v_done=1 THEN

LEAVE loop_tag;

END IF;

IF STRCMP(in_pid,'-1')=0 THEN

insert into t_tlm_device_tree(id,pid,nodename,oid) values('001',null,v_nodename,v_id);

ELSE

select id into v_tree_pid from t_tlm_device_tree where oid = in_pid;

set v_rows = v_rows+1;

set v_tree_id = concat('000',v_rows);

set @len = LENGTH(v_tree_id)-2;

set v_tree_id = SUBSTR(v_tree_id FROM @len);

set v_tree_id = concat(v_tree_pid,v_tree_id);

insert into t_tlm_device_tree(id,pid,nodename,oid) values(v_tree_id,v_tree_pid,v_nodename,v_id);

END IF;

set v_has_child = f_has_child_by_pid(v_id);

IF v_has_child =1 THEN

call p_create_tree_node(v_id);

END IF;

END LOOP loop_tag;

CLOSE v_cur;

END

;;

DELIMITER ;

-- ----------------------------

-- Procedure structure for `p_get_device_tree`

-- ----------------------------

DROP PROCEDURE IF EXISTS `p_get_device_tree`;

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_get_device_tree`()

BEGIN

DECLARE v_pid VARCHAR(100) default '-1';

DROP TEMPORARY TABLE IF EXISTS t_tlm_device_tree;

CREATE TEMPORARY TABLE t_tlm_device_tree (

id varchar(100),

pid varchar(100),

nodename varchar(100),

oid int(100),

PRIMARY KEY (id)

);

call p_create_tree_node(v_pid);

select * from t_tlm_device_tree;

TRUNCATE TABLE t_tlm_device_tree;

DROP TEMPORARY TABLE IF EXISTS t_tlm_device_tree;

END

;;

DELIMITER ;

-- ----------------------------

-- Function structure for `f_has_child_by_pid`

-- ----------------------------

DROP FUNCTION IF EXISTS `f_has_child_by_pid`;

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` FUNCTION `f_has_child_by_pid`(`f_pid` varchar(100)) RETURNS int(11)

BEGIN

DECLARE v_ret int default 0;

select count(1) into @num from t_tlm_tree where pid=f_pid and `fast`=1;

IF @num >0 THEN

set v_ret = 1;

END IF;

return v_ret;

END

;;

DELIMITER ;

?

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

mysql导入组织树脚本_mysql存储过程递归调用发作树数据相关推荐

  1. 理解 with递归调用 Sqlserver 树查询

    理解 with递归调用 Sqlserver 树查询 --with用法 --可以这么理解with SQL语句变量或者叫临时表名 as(SQL语句 ) select * from SQL语句变量或者叫临时 ...

  2. mysql 存过 if语句_mysql存储过程 if 语句

    MySql的存储过程 存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存 ...

  3. mysql存储过参数拼接_mysql 存储过程动态拼接sql并执行赋值

    CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`(in _xnb varchar(50)) BEGIN ## 定义变量 DECLARE _num FL ...

  4. mysql自动异地备份脚本_MYSQL数据库自动本地/异地双备份/MYSQL增量备份

    构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)架构图 继续介绍Linux服务器文件备份,数据库备份,数据安全存储相关的电子商务系统架构.针对安全性有多种多样的解决方案,其中数据备份是 ...

  5. mysql导入excel表异常_mysql导入excel表格数据时出错的解决

    Navicat for MySQL导入数据时报错 1:导入的是Excel2007表格格式的数据. 2: 报错以后数据加进去了.(选择了错误继续执行) 3:这个错误对我的数据有影响吗? 4:造成这个错误 ...

  6. php递归实现层级树状展开,PHP递归实现层级树状展开,php递归层级树状_PHP教程...

    PHP递归实现层级树状展开,php递归层级树状 本文实例为大家分享了PHP递归实现层级树状展开的主要代码,供大家参考,具体内容如下 效果图: 实现代码: $arr['id'], 'fid' => ...

  7. Java技术积累递归调用——解析树的基本实现原理

    在做项目的过程中,经常会用到树结构.关于树结构的框架我也接触过几个,比如easyui中封装的树,Ztree等.当然这些封装好的框架只需要我们去按照API来使用即可,那么树的实现原理究竟是怎样的.今天用 ...

  8. mysql倍增表的内容_MySQL入门(7)——表数据的增、删、改

    MySQL入门(7)--表数据的增.删.改 插入数据 使用INSERT···VALUES语句插入数据 INSERT语句最常用的格式是INSERT···VALUES: INSERT [LOW_PRIOR ...

  9. mysql导入本地sql脚本的两种方式

    高效导入多个.sql文件方法详解 常用的命令有两个:mysql和source 此外还有sqlimport和LOAD DATA INFILE等导入方法,不过它们主要用于导入.csv或.xml文件数据,不 ...

最新文章

  1. gcc/g++添加头文件目录和库文件目录
  2. python【蓝桥杯vip练习题库】BASIC-16分解质因数(数论 质数分解)
  3. 【LeetCode】Recursion(共11题)
  4. CAS Server(二):基于SpringBoot搭建客户端
  5. mac下对NTFS格式的磁盘进行读写操作
  6. 左手价格战右手结盟 巨头加码云计算市场洗牌在即
  7. html js清除缓存,js清除浏览器缓存的几种方法
  8. php ioc容器,PHP 在Swoole中使用双IoC容器实现无污染的依赖注入
  9. 13.JAVA之GUI编程将程序打包jar
  10. 【干货】2021年重点行业薪酬趋势指南.pdf(附下载链接)
  11. day42-mysql索引
  12. mybatis(二)
  13. 庞果网一道题(字符博弈)的一点想法
  14. VTK(四)---VMTK血管中心线提取
  15. 华中数控808系统说明书_智能制造之高端数控系统龙头
  16. Python物流运输管理系统源代码,基于Django实现,实现了运单录入、发车出库、到货签收、客户签收等基本功能,含测试账号
  17. 大学生程序设计邀请赛(华东师范大学)A
  18. java代码实现打气球游戏_关于javascript和css3开发打气球小游戏的完整代码
  19. linux的定时重启命令
  20. unlikely和likely的使用

热门文章

  1. Docker Win 10 安装
  2. 行内元素垂直方向位置调整的一些感悟和困惑
  3. 意外发现一个很不错的涂鸦作者
  4. spring-boot 使用 main函数 无法启动的问题完美 解决方案。
  5. 使用Thumbnailator处理gif图片时遇到java.lang.ArrayIndexOutOfBoundsException: 4096异常处理
  6. 更新条目时出错。有关详细信息,请参见内部异常。
  7. 推荐系统系列教程之十四:经典模型融合方法----线性模型和树模型的组合拳
  8. mysql 实现表值函数,SQL SERVER 的 CLR表值函数
  9. 中props使用this报错_为什么在静态方法中不能使用this
  10. android switch自定义样式,Android自定义Switch样式