查询节点的所有父节点,按层级排序的存储过程
父子关系表结构:
`parentnode` int(11) ,-- 父节点
`node` int(11) , -- 节点
`isparent` int(11) -- 是否为父节点
drop PROCEDURE if EXISTS `getparentlst`;
DELIMITER //
CREATE PROCEDURE `getparentlst`(myid INTEGER)
begin
DECLARE sTemp INTEGER;
DECLARE sLevel INTEGER;
set sTemp=myid;
set sLevel=1;
CREATE TEMPORARY TABLE IF not EXISTS TEMP_父子关系表 (
`parentnode` int(11) ,-- 父节点
`node` int(11) , -- 节点
`isparent` int(11) , -- 是否为父节点
`level` int(11) -- 层级
)
ENGINE=MEMORY DEFAULT CHARSET=latin1 MAX_ROWS=10000;
WHILE sTemp<>0 do
insert into TEMP_父子关系表 SELECT t.parentnode,t.node,t.isparent,sLevel as `level` from viewparentchild t where node =sTemp and isparent=1;
select parentnode into sTemp from 父子关系表 where node =sTemp and isparent=1;
if(sTemp<>0) then
set sLevel = sLevel +1;
end if;
end WHILE;
select * from TEMP_父子关系表 view
order by view.level desc;
truncate table TEMP_父子关系表;
end;
//
分享到:
2011-10-12 16:00
浏览 2935
分类:数据库
评论