mysql导入组织树脚本_mysql存储过程递归调用发作树数据
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存储过程递归调用发作树数据相关推荐
- 理解 with递归调用 Sqlserver 树查询
理解 with递归调用 Sqlserver 树查询 --with用法 --可以这么理解with SQL语句变量或者叫临时表名 as(SQL语句 ) select * from SQL语句变量或者叫临时 ...
- mysql 存过 if语句_mysql存储过程 if 语句
MySql的存储过程 存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存 ...
- mysql存储过参数拼接_mysql 存储过程动态拼接sql并执行赋值
CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`(in _xnb varchar(50)) BEGIN ## 定义变量 DECLARE _num FL ...
- mysql自动异地备份脚本_MYSQL数据库自动本地/异地双备份/MYSQL增量备份
构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)架构图 继续介绍Linux服务器文件备份,数据库备份,数据安全存储相关的电子商务系统架构.针对安全性有多种多样的解决方案,其中数据备份是 ...
- mysql导入excel表异常_mysql导入excel表格数据时出错的解决
Navicat for MySQL导入数据时报错 1:导入的是Excel2007表格格式的数据. 2: 报错以后数据加进去了.(选择了错误继续执行) 3:这个错误对我的数据有影响吗? 4:造成这个错误 ...
- php递归实现层级树状展开,PHP递归实现层级树状展开,php递归层级树状_PHP教程...
PHP递归实现层级树状展开,php递归层级树状 本文实例为大家分享了PHP递归实现层级树状展开的主要代码,供大家参考,具体内容如下 效果图: 实现代码: $arr['id'], 'fid' => ...
- Java技术积累递归调用——解析树的基本实现原理
在做项目的过程中,经常会用到树结构.关于树结构的框架我也接触过几个,比如easyui中封装的树,Ztree等.当然这些封装好的框架只需要我们去按照API来使用即可,那么树的实现原理究竟是怎样的.今天用 ...
- mysql倍增表的内容_MySQL入门(7)——表数据的增、删、改
MySQL入门(7)--表数据的增.删.改 插入数据 使用INSERT···VALUES语句插入数据 INSERT语句最常用的格式是INSERT···VALUES: INSERT [LOW_PRIOR ...
- mysql导入本地sql脚本的两种方式
高效导入多个.sql文件方法详解 常用的命令有两个:mysql和source 此外还有sqlimport和LOAD DATA INFILE等导入方法,不过它们主要用于导入.csv或.xml文件数据,不 ...
最新文章
- gcc/g++添加头文件目录和库文件目录
- python【蓝桥杯vip练习题库】BASIC-16分解质因数(数论 质数分解)
- 【LeetCode】Recursion(共11题)
- CAS Server(二):基于SpringBoot搭建客户端
- mac下对NTFS格式的磁盘进行读写操作
- 左手价格战右手结盟 巨头加码云计算市场洗牌在即
- html js清除缓存,js清除浏览器缓存的几种方法
- php ioc容器,PHP 在Swoole中使用双IoC容器实现无污染的依赖注入
- 13.JAVA之GUI编程将程序打包jar
- 【干货】2021年重点行业薪酬趋势指南.pdf(附下载链接)
- day42-mysql索引
- mybatis(二)
- 庞果网一道题(字符博弈)的一点想法
- VTK(四)---VMTK血管中心线提取
- 华中数控808系统说明书_智能制造之高端数控系统龙头
- Python物流运输管理系统源代码,基于Django实现,实现了运单录入、发车出库、到货签收、客户签收等基本功能,含测试账号
- 大学生程序设计邀请赛(华东师范大学)A
- java代码实现打气球游戏_关于javascript和css3开发打气球小游戏的完整代码
- linux的定时重启命令
- unlikely和likely的使用
热门文章
- Docker Win 10 安装
- 行内元素垂直方向位置调整的一些感悟和困惑
- 意外发现一个很不错的涂鸦作者
- spring-boot 使用 main函数 无法启动的问题完美 解决方案。
- 使用Thumbnailator处理gif图片时遇到java.lang.ArrayIndexOutOfBoundsException: 4096异常处理
- 更新条目时出错。有关详细信息,请参见内部异常。
- 推荐系统系列教程之十四:经典模型融合方法----线性模型和树模型的组合拳
- mysql 实现表值函数,SQL SERVER 的 CLR表值函数
- 中props使用this报错_为什么在静态方法中不能使用this
- android switch自定义样式,Android自定义Switch样式