Mysql递归查询树形表

  1. DROP TABLE IF EXISTS `t_areainfo`;  
  2. CREATE TABLE `t_areainfo` (  
  3.  `id` int(11) NOT NULL AUTO_INCREMENT,  
  4.  `levelint(11) DEFAULT 0,  
  5.  `namevarchar(255),  
  6.  `parentId` int(11),  
  7.  `status` int(11) DEFAULT 0,  
  8.  PRIMARY KEY (`id`)  
  9. ) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8;  
  10.   
  11.   
  12. INSERT INTO `t_areainfo` VALUES ('1''0''中国''0''0');  
  13. INSERT INTO `t_areainfo` VALUES ('2''0''华北区''1''0');  
  14. INSERT INTO `t_areainfo` VALUES ('3''0''华南区''1''0');  
  15. INSERT INTO `t_areainfo` VALUES ('4''0''北京''2''0');  
  16. INSERT INTO `t_areainfo` VALUES ('5''0''海淀区''4''0');  
  17. INSERT INTO `t_areainfo` VALUES ('6''0''丰台区''4''0');  
  18. INSERT INTO `t_areainfo` VALUES ('7''0''朝阳区''4''0');  
  19. INSERT INTO `t_areainfo` VALUES ('8''0''北京XX区1''4''0');  
  20. INSERT INTO `t_areainfo` VALUES ('9''0''北京XX区2''4''0');  
  21. INSERT INTO `t_areainfo` VALUES ('10''0''北京XX区3''4''0');  
  22. INSERT INTO `t_areainfo` VALUES ('11''0''北京XX区4''4''0');  
  23. INSERT INTO `t_areainfo` VALUES ('12''0''北京XX区5''4''0');  
  24. INSERT INTO `t_areainfo` VALUES ('13''0''北京XX区6''4''0');  
  25. INSERT INTO `t_areainfo` VALUES ('14''0''北京XX区7''4''0');  
  26. INSERT INTO `t_areainfo` VALUES ('15''0''北京XX区8''4''0');  
  27. INSERT INTO `t_areainfo` VALUES ('16''0''北京XX区9''4''0');  
  28. INSERT INTO `t_areainfo` VALUES ('17''0''北京XX区10''4''0');  
  29. INSERT INTO `t_areainfo` VALUES ('18''0''北京XX区11''4''0');  
  30. INSERT INTO `t_areainfo` VALUES ('19''0''北京XX区12''4''0');  
  31. INSERT INTO `t_areainfo` VALUES ('20''0''北京XX区13''4''0');  
  32. INSERT INTO `t_areainfo` VALUES ('21''0''北京XX区14''4''0');  
  33. INSERT INTO `t_areainfo` VALUES ('22''0''北京XX区15''4''0');  
  34. INSERT INTO `t_areainfo` VALUES ('23''0''北京XX区16''4''0');  
  35. INSERT INTO `t_areainfo` VALUES ('24''0''北京XX区17''4''0');  
  36. INSERT INTO `t_areainfo` VALUES ('25''0''北京XX区18''4''0');  
  37. INSERT INTO `t_areainfo` VALUES ('26''0''北京XX区19''4''0');  
  38. INSERT INTO `t_areainfo` VALUES ('27''0''北京XX区1''4''0');  
  39. INSERT INTO `t_areainfo` VALUES ('28''0''北京XX区2''4''0');  
  40. INSERT INTO `t_areainfo` VALUES ('29''0''北京XX区3''4''0');  
  41. INSERT INTO `t_areainfo` VALUES ('30''0''北京XX区4''4''0');  
  42. INSERT INTO `t_areainfo` VALUES ('31''0''北京XX区5''4''0');  
  43. INSERT INTO `t_areainfo` VALUES ('32''0''北京XX区6''4''0');  
  44. INSERT INTO `t_areainfo` VALUES ('33''0''北京XX区7''4''0');  
  45. INSERT INTO `t_areainfo` VALUES ('34''0''北京XX区8''4''0');  
  46. INSERT INTO `t_areainfo` VALUES ('35''0''北京XX区9''4''0');  
  47. INSERT INTO `t_areainfo` VALUES ('36''0''北京XX区10''4''0');  
  48. INSERT INTO `t_areainfo` VALUES ('37''0''北京XX区11''4''0');  
  49. INSERT INTO `t_areainfo` VALUES ('38''0''北京XX区12''4''0');  
  50. INSERT INTO `t_areainfo` VALUES ('39''0''北京XX区13''4''0');  
  51. INSERT INTO `t_areainfo` VALUES ('40''0''北京XX区14''4''0');  
  52. INSERT INTO `t_areainfo` VALUES ('41''0''北京XX区15''4''0');  
  53. INSERT INTO `t_areainfo` VALUES ('42''0''北京XX区16''4''0');  
  54. INSERT INTO `t_areainfo` VALUES ('43''0''北京XX区17''4''0');  
  55. INSERT INTO `t_areainfo` VALUES ('44''0''北京XX区18''4''0');  
  56. INSERT INTO `t_areainfo` VALUES ('45''0''北京XX区19''4''0');  
  57. INSERT INTO `t_areainfo` VALUES ('46''0''xx省1''1''0');  
  58. INSERT INTO `t_areainfo` VALUES ('47''0''xx省2''1''0');  
  59. INSERT INTO `t_areainfo` VALUES ('48''0''xx省3''1''0');  
  60. INSERT INTO `t_areainfo` VALUES ('49''0''xx省4''1''0');  
  61. INSERT INTO `t_areainfo` VALUES ('50''0''xx省5''1''0');  
  62. INSERT INTO `t_areainfo` VALUES ('51''0''xx省6''1''0');  
  63. INSERT INTO `t_areainfo` VALUES ('52''0''xx省7''1''0');  
  64. INSERT INTO `t_areainfo` VALUES ('53''0''xx省8''1''0');  
  65. INSERT INTO `t_areainfo` VALUES ('54''0''xx省9''1''0');  
  66. INSERT INTO `t_areainfo` VALUES ('55''0''xx省10''1''0');  
  67. INSERT INTO `t_areainfo` VALUES ('56''0''xx省11''1''0');  
  68. INSERT INTO `t_areainfo` VALUES ('57''0''xx省12''1''0');  
  69. INSERT INTO `t_areainfo` VALUES ('58''0''xx省13''1''0');  
  70. INSERT INTO `t_areainfo` VALUES ('59''0''xx省14''1''0');  
  71. INSERT INTO `t_areainfo` VALUES ('60''0''xx省15''1''0');  
  72. INSERT INTO `t_areainfo` VALUES ('61''0''xx省16''1''0');  
  73. INSERT INTO `t_areainfo` VALUES ('62''0''xx省17''1''0');  
  74. INSERT INTO `t_areainfo` VALUES ('63''0''xx省18''1''0');  
  75. INSERT INTO `t_areainfo` VALUES ('64''0''xx省19''1''0');  
  76.   
  77.   
  78. --方式一:采用function获取所有子节点的id  
  79. --查询传入areaId及其以下所有子节点  
  80.   
  81. delimiter //  
  82. DROP FUNCTION IF EXISTS queryChildrenAreaInfo;  
  83. CREATE FUNCTION `queryChildrenAreaInfo` (areaId INT)  
  84. RETURNS VARCHAR(4000)  
  85. BEGIN  
  86. DECLARE sTemp VARCHAR(4000);  
  87. DECLARE sTempChd VARCHAR(4000);  
  88.   
  89. SET sTemp = '$';  
  90. SET sTempChd = cast(areaId as char);  
  91.   
  92. WHILE sTempChd is not NULL DO  
  93. SET sTemp = CONCAT(sTemp,',',sTempChd);  
  94. SELECT group_concat(id) INTO sTempChd FROM t_areainfo where FIND_IN_SET(parentId,sTempChd)>0;  
  95. END WHILE;  
  96. return sTemp;  
  97. END  
  98. //  
  99. delimiter //  
  100.   
  101.   
  102. 2  
  103. --调用方式  
  104. select queryChildrenAreaInfo(1);  
  105. select * from t_areainfo where FIND_IN_SET(id, queryChildrenAreaInfo(20));   
  106.   
  107. /*  
  108.   
  109. delimiter //  
  110.   
  111. CREATE FUNCTION `queryChildrenAreaInfo`(rootId INT)  
  112. RETURNS varchar(1000)  
  113. BEGIN  
  114. DECLARE sTemp VARCHAR(1000);  
  115. DECLARE sTempChd VARCHAR(1000);  
  116.   
  117. SET sTemp = '$';  
  118. SET sTempChd =cast(rootId as CHAR);  
  119.   
  120. WHILE sTempChd is not null DO  
  121. SET sTemp = concat(sTemp,',',sTempChd);  
  122. SELECT group_concat(id) INTO sTempChd FROM t_areainfo where FIND_IN_SET(parentId,sTempChd)>0;  
  123. END WHILE;  
  124. RETURN sTemp;  
  125. END  
  126. //  
  127.   
  128. delimiter ;  
  129.   
  130. */  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值