阅读背景:

mysql级联查询

来源:互联网 
实现效果 例如:  中国 下的 省 市 县 乡  输入 省的id 能把该省下的市,县,乡全部查出来,输入该市的id 可以把 该市下的 县,乡全部查出来 oracle 级联查询:oracle有内置函数  start with …connect by prior 直接实现级联效果如 select a.* from T_depart  a start with depid=’213520′ connect by prior depid=pdepid depid是指 部门编号, pdepid是指上级部门编号   depid=’213520′  是指查递归depid=213520的部门即查出 depid是213520 的子节点,孙节点,重孙节点,…… 不过在mysql 中就有点麻烦了,得创建方法,并调用: mysql中:创建function:  DELIMITER $$ USE `device`$$ DROP FUNCTION IF EXISTS `getChildList`$$ CREATE DEFINER=`root`@`localhost` FUNCTION `getChildList`(rootId VARCHAR(100)) RETURNS VARCHAR(1000) CHARSET utf8 BEGIN        DECLARE pTemp VARCHAR(1000);          DECLARE cTemp VARCHAR(1000);        SET pTemp = ‘$’;          SET cTemp = rootId;                 WHILE cTemp IS NOT NULL DO            SET pTemp = CONCAT(pTemp,’,’,cTemp);            SELECT GROUP_CONCAT(depid) INTO cTemp FROM T_depart            WHERE FIND_IN_SET(pdepid,cTemp)>0;        END WHILE;          RETURN pTemp;     END$$ DELIMITER ; 通过  select getChildList(‘213520‘) from dual 可以验证查出 id是213520及它以下节点的id 例如 我的结果是 $,213520,21352012,21352013 通过 select * from ‘T_depart’ where find_in_set (depid,getChildList(‘213520‘)); 就会查出 T_depart这个表中, id = ‘213520’ 及其子孙节点的详细信息。实现效果 例如:  中国 下的 省 市 县 乡  输入 省的id 能把该省下的市,县,乡全部查出来,


你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: