Mysql学习mysql递归查询实例解析
《Mysql学习mysql递归查询实例解析》要点: MYSQL实例办法1,mysql递归查询. Navicat MySQL Data Transfer ? Source Server???????? : mysql_demo3 Source Server Version : 50521 Source Host?????????? : localhost:3306 Source Database?????? : test ? Target Server Type??? : MYSQL Target Server Version : 50521 File Encoding???????? : 65001 ?? Date: 2012-09-02 21:16:03 */ ? SET FOREIGN_KEY_CHECKS=0; ? -- ---------------------------- -- 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; ? -- ---------------------------- -- 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'); ? MYSQL实例上边是sql脚本,在执行select * 之后显示的结果集如下: +----+----------+------+ | id | nodename | pid? | +----+----------+------+ |? 1 | A??????? |??? 0 | |? 2 | B??????? |??? 1 | |? 3 | C??????? |??? 1 | |? 4 | D??????? |??? 2 | |? 5 | E??????? |??? 2 | |? 6 | F??????? |??? 3 | |? 7 | G??????? |??? 6 | |? 8 | H??????? |??? 0 | |? 9 | I??????? |??? 8 | | 10 | J??????? |??? 8 | | 11 | K??????? |??? 8 | | 12 | L??????? |??? 9 | | 13 | M??????? |??? 9 | | 14 | N??????? |?? 12 | | 15 | O??????? |?? 12 | | 16 | P??????? |?? 15 | | 17 | Q??????? |?? 15 | +----+----------+------+ 17 rows in set (0.00 sec) ? MYSQL实例树形图: ? +-- 2:B ? |??? +-- 4:D ? |??? +-- 5:E ? +-- 3:C ?????? +-- 6:F ??????????? +-- 7:G 8:H ? +-- 9:I ? |??? +-- 12:L ? |??? |??? +--14:N ? |??? |??? +--15:O ? |??? |??????? +--16:P ? |??? |??????? +--17:Q ? |??? +-- 13:M ? +-- 10:J ? +-- 11:K?? ? MYSQL实例如果给你一个这样的table,让你查询根节点为1下的所有节点记录(注意也包括根节点)? mysql> mysql> CREATE FUNCTION `getChildLst`(rootId INT) ??? RETURNS varchar(1000) ?????? 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 ??? ; Query OK,0 rows affected (0.00 sec) ? mysql> mysql> delimiter ; ? MYSQL实例? +-----------------+ | getChildLst(1)? | +-----------------+ | $,1,2,3,4,5,6,7 | +-----------------+ 1 row in set (0.00 sec) ? mysql> select * from treeNodes ??? -> where FIND_IN_SET(id,getChildLst(1)); +----+----------+------+ | id | nodename | pid? | +----+----------+------+ |? 1 | A??????? |??? 0 | |? 2 | B??????? |??? 1 | |? 3 | C??????? |??? 1 | |? 4 | D??????? |??? 2 | |? 5 | E??????? |??? 2 | |? 6 | F??????? |??? 3 | |? 7 | G??????? |??? 6 | +----+----------+------+ 7 rows in set (0.01 sec) ? mysql> select * from treeNodes ??? -> where FIND_IN_SET(id,getChildLst(3)); +----+----------+------+ | id | nodename | pid? | +----+----------+------+ |? 3 | C??????? |??? 1 | |? 6 | F??????? |??? 3 | |? 7 | G??????? |??? 6 | +----+----------+------+ 3 rows in set (0.01 sec) ? MYSQL实例只要按我的做,百发百中百步穿杨,遇到问题万变不离其宗直接粘贴复制就是. ???? select id from treeNodes where FIND_IN_SET(id,getChildLst(3)) ); ? MYSQL实例子查询的结果集是:? 编程之家PHP培训学院每天发布《Mysql学习mysql递归查询实例解析》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |