mysql存储过程遍历树例子


– 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

猜你喜欢

转载自blog.csdn.net/w786572258/article/details/54600694