想用一个递归得到一个树,可是结果和想要的结构不一样,麻烦各位帮在下看看,万分感谢。
测试数据:
CREATE TABLE `nodetbl` (
`nodeid` int(11) NOT NULL auto_increment,
`nodename` varchar(64) NOT NULL,
`parentid` int(11) NOT NULL,
`nodetype` int(11) NOT NULL,
PRIMARY KEY (`nodeid`)
) create table tmp_table(
t_nodeId int(11),
t_nodename varchar(64),
t_nodetype int(11),
t_nodelvl int(11),
t_nodeson int(11)
)
insert into nodetbl values ('根区域',-1,0);
insert into nodetbl values ('7楼,1,0);
insert into nodetbl values ('test,2,1);
insert into nodetbl values ('zimu',1,1);想要得到的结果如下:
t_nodeId t_nodename t_nodetype t_nodelvl t_nodeson
1 根区域 0 1 2
2 7楼 0 2 1
3 test 1 3 0
4 zimu 1 2 0DELIMITER $$DROP PROCEDURE IF EXISTS `ehomedatabase`.`get_tree`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `get_tree`(paraId int,nodelvl int)
begin
declare t_id int(11);
declare t_Name varchar(64);
declare t_Type int(11);
declare t_sonsum int(11);
declare cur_id CURSOR for
select nodeid,nodename,nodetype from nodetbl where parentid = paraId;
open cur_id;
fetch cur_id into t_id,t_Name,t_Type;
while(t_id is not null) do
select count(1) into t_sonsum from nodetbl where parentid = t_id;
insert into tmp_table(t_nodeId,t_nodename,t_nodetype,t_nodelvl,t_nodeson) values (t_id,t_Name,t_Type,nodelvl,t_sonsum);
if t_sonsum > 0 then
call get_tree(t_id,nodelvl+1);
end if;
fetch cur_id into t_id,t_Name,t_Type; //这个游标没有进行下去,所以得到的数据不正确
end while;
close cur_id;
END$$DELIMITER ;
测试数据:
CREATE TABLE `nodetbl` (
`nodeid` int(11) NOT NULL auto_increment,
`nodename` varchar(64) NOT NULL,
`parentid` int(11) NOT NULL,
`nodetype` int(11) NOT NULL,
PRIMARY KEY (`nodeid`)
) create table tmp_table(
t_nodeId int(11),
t_nodename varchar(64),
t_nodetype int(11),
t_nodelvl int(11),
t_nodeson int(11)
)
insert into nodetbl values ('根区域',-1,0);
insert into nodetbl values ('7楼,1,0);
insert into nodetbl values ('test,2,1);
insert into nodetbl values ('zimu',1,1);想要得到的结果如下:
t_nodeId t_nodename t_nodetype t_nodelvl t_nodeson
1 根区域 0 1 2
2 7楼 0 2 1
3 test 1 3 0
4 zimu 1 2 0DELIMITER $$DROP PROCEDURE IF EXISTS `ehomedatabase`.`get_tree`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `get_tree`(paraId int,nodelvl int)
begin
declare t_id int(11);
declare t_Name varchar(64);
declare t_Type int(11);
declare t_sonsum int(11);
declare cur_id CURSOR for
select nodeid,nodename,nodetype from nodetbl where parentid = paraId;
open cur_id;
fetch cur_id into t_id,t_Name,t_Type;
while(t_id is not null) do
select count(1) into t_sonsum from nodetbl where parentid = t_id;
insert into tmp_table(t_nodeId,t_nodename,t_nodetype,t_nodelvl,t_nodeson) values (t_id,t_Name,t_Type,nodelvl,t_sonsum);
if t_sonsum > 0 then
call get_tree(t_id,nodelvl+1);
end if;
fetch cur_id into t_id,t_Name,t_Type; //这个游标没有进行下去,所以得到的数据不正确
end while;
close cur_id;
END$$DELIMITER ;
解决方案 »
- mysql数据库查询统计
- 谁给推荐本mysql的书?
- SQL脚本执行命令行窗口自动关闭
- linux下从mysql5.1.41-log版本升级到5.5.8版本,怎么做?
- 关于mysql数据库并发访问的问题
- MySQL 帮忙写个MySQL语句
- 跪求:mysql存储过程的例子,带输入,输出参数的(5.0支持存储过程)
- mysql中请问单凭以下这幅关系图如何才能关联最多3个表就可以查询front_cor_employ中的所有字段值?
- 兄弟们,帮帮忙! postgres7.3.4 for unix 在哪里可以下载到?
- mysql小白问题很简单请进
- 在线请人写一条SQL语句 在线等!写好给高分
- mysql 主同配置 error2002
检查是否有满足条件的记录
insert into nodetbl(nodename,parentid,nodetype) values ('7楼',1,0);
insert into nodetbl(nodename,parentid,nodetype) values ('test',2,1);
insert into nodetbl(nodename,parentid,nodetype) values ('zimu',1,1);
fetch cur_id into t_id,t_Name,t_Type;没有控制。
MySQL中进行树状所有子节点的查询