mysql 递归查询的方法
2015-07-31 17:47
706 查看
表结构和数据
笨办法:一级写一个查询结果联合起来
使用函数方法:创建函数来获取个节点的值
CREATE TABLE `class` ( `classid` int(11) NOT NULL AUTO_INCREMENT, `banji` int(11) DEFAULT NULL COMMENT '0', `nianji` varchar(255) DEFAULT NULL, PRIMARY KEY (`classid`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of class -- ---------------------------- INSERT INTO `class` VALUES ('1', '0', '1'); INSERT INTO `class` VALUES ('2', '1', '2'); INSERT INTO `class` VALUES ('3', '1', 'f'); INSERT INTO `class` VALUES ('4', '2', 'd'); INSERT INTO `class` VALUES ('5', '3', 's'); INSERT INTO `class` VALUES ('6', '0', 'a'); INSERT INTO `class` VALUES ('7', '6', 'q'); INSERT INTO `class` VALUES ('8', '7', 'h'); INSERT INTO `class` VALUES ('9', '5', '额'); INSERT INTO `class` VALUES ('10', '4', '121');
笨办法:一级写一个查询结果联合起来
SELECT * from class WHERE classid =1 UNION SELECT * FROM class where banji in(SELECT classid from class WHERE classid =1 ) UNION SELECT * FROM class where banji in (SELECT classid FROM class where banji in(SELECT classid from class WHERE classid =1))
使用函数方法:创建函数来获取个节点的值
CREATE FUNCTION `selectTree`(`id` int) RETURNS varchar(2000) BEGIN #Routine body goes here... DECLARE st VARCHAR(4000); DECLARE stcc VARCHAR(2000); #给st赋初值不能null,null会没有返回值 set st=''; set stcc=id; #判断stcc的是否为null WHILE stcc is not NULL DO #拼接字符串赋值给st SET st=CONCAT(st,',',stcc); SELECT GROUP_CONCAT(classid) INTO stcc FROM class where FIND_IN_SET(banji,stcc)>0; END WHILE; RETURN st; END;
调用函数查出结果
SELECT * from class where classid in (SELECT a.ban FROM class a,class b where a.banji=b.classid) and banji=0
相关文章推荐
- lampp 修改MySQL数据库存储路径
- 利用mysql对特殊字符和超长字符会进行截断的特性 进行存储型XSS攻击——WordPress <4.1.2 & <=4.2 存储型xss
- mysql定义和调用存储过程
- mysql innodb 性能优化
- 查看MySQL的警告信息
- MySQL之Master-Master配置
- mysql创建/删除表的例子
- log4net引用了Mysql.Data.dll,但是就是不能写到mysql数据库的解决办法
- MySql视图原理讲解与使用大全
- MySQL 错误1418 的原因分析及解决方法
- mysql aaa.123abc.com要换成aaa.123.net
- mysql查询语句in和exists二者的区别和性能影响
- MySQL规范
- 常用的mysql语句
- 使用Hibernate框架链接访问MySql数…
- mysql排序后自动生变编号
- 向MySql数据库中导入Excel表格中的…
- 使用SQLyog导出导入MySql中的数据…
- MySQL之查询性能优化二
- 磁盘空间满引起的mysql启动失败:ERROR! MySQL server PID file could not be found!