您的位置:首页 > 数据库 > MySQL

mysql存储过程遍历树例子

2017-01-18 14:08 465 查看
– Table structure for treenodes

DROP TABLE IF EXISTS
treenodes
;

CREATE TABLE
treenodes
(

id
int(11) NOT NULL,

nodename
varchar(20) DEFAULT NULL,

pid
int(11) DEFAULT NULL,

PRIMARY KEY (
id
)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

– Records of treenodes

INSERT INTO
treenodes
VALUES (‘1’, ‘A’, ‘0’);

INSERT INTO
treenodes
VALUES (‘2’, ‘B’, ‘1’);

INSERT INTO
treenodes
VALUES (‘3’, ‘C’, ‘1’);

INSERT INTO
treenodes
VALUES (‘4’, ‘D’, ‘2’);

INSERT INTO
treenodes
VALUES (‘5’, ‘E’, ‘2’);

INSERT INTO
treenodes
VALUES (‘6’, ‘F’, ‘3’);

INSERT INTO
treenodes
VALUES (‘7’, ‘G’, ‘6’);

INSERT INTO
treenodes
VALUES (‘8’, ‘H’, ‘0’);

INSERT INTO
treenodes
VALUES (‘9’, ‘I’, ‘8’);

INSERT INTO
treenodes
VALUES (‘10’, ‘J’, ‘8’);

INSERT INTO
treenodes
VALUES (‘11’, ‘K’, ‘8’);

INSERT INTO
treenodes
VALUES (‘12’, ‘L’, ‘9’);

INSERT INTO
treenodes
VALUES (‘13’, ‘M’, ‘9’);

INSERT INTO
treenodes
VALUES (‘14’, ‘N’, ‘12’);

INSERT INTO
treenodes
VALUES (‘15’, ‘O’, ‘12’);

INSERT INTO
treenodes
VALUES (‘16’, ‘P’, ‘15’);

INSERT INTO
treenodes
VALUES (‘17’, ‘Q’, ‘15’);

DROP FUNCTION IF EXISTS
getChildLst
;

DELIMITER ;;

CREATE DEFINER=
root
@
localhost
FUNCTION
getChildLst
(rootId INT) RETURNS varchar(1000) CHARSET utf8

BEGIN

DECLARE sTemp varchar(1000);

DECLARE sTempChd VARCHAR(1000);

SET sTemp = ‘$’;

SET sTempChd =cast(rootId as CHAR);

WHILE sTempChd is not null DO

SET sTemp = concat(sTemp,’,’,sTempChd);

SELECT group_concat(id) INTO sTempChd FROM treenodes where FIND_IN_SET(pid,sTempChd)>0;

END WHILE;

RETURN sTemp;

END

;;

DELIMITER ;

用法

select * from treenodes WHERE FIND_IN_SET( id, getChildLst( 2 ) )

原文:http://blog.csdn.net/ACMAIN_CHM/article/details/4142971
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存储过程 mysql