您的位置:首页 > 数据库 > SQL

MySQL实现递归调用,查询组织架构树

2015-07-02 12:00 645 查看
表结构如下:

CREATE TABLE `t_department` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `parent_id` int(11) DEFAULT NULL,

  `name` varchar(45) DEFAULT NULL,

  `defrole_id` int(11) DEFAULT NULL,

  `company_id` int(11) DEFAULT NULL,

  `remark` varchar(100) DEFAULT NULL,

  `createtime` datetime DEFAULT NULL,

  `modifytime` datetime DEFAULT NULL,

  PRIMARY KEY (`id`)



现在需要实现选出某个部门下面的所有子部门,在Oracle当中可以通过递归调用connect prior来做,但是

Mysql没有递归查询,我选择自己做一个Function来解决。

DELIMITER //

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 t_department where FIND_IN_SET(parent_id,sTempChd)>0; 

      END WHILE; 

      RETURN sTemp; 

    END//

DELIMITER ;

然后通过下面的SQL语句就可以选出对应部门的所有子部门。

select * from t_department 

where FIND_IN_SET(id, getChildLst(1)); 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: