多级数据-Mysql 中的递归层次查询(父子查询)
最近遇到了一个问题,在mysql 中如何完成节点下的所有节点或节点上的所有父节点的查询?
在Oracle 中我们知道有一个Hierarchical Queries 可以通过CONNECT BY 来查询,但是,在MySQL 中还没有对应的函数!!! 下面给出一个function 来完成的方法
下面是sql 脚本,想要运行的直接赋值粘贴进数据库即可。
创建表treenodes (可以根据需要进行更改)
1 2 3 4 5 6 7 8 9 10 -- ----------------------------
-- 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 =InnoDB DEFAULT CHARSET =latin1;
插入几条数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -- ----------------------------
-- 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');
把下面的语句直接粘贴进命令行执行即可(注意修改传入的参数,默认rootId ,表明默认treenodes )