快捷搜索: 王者荣耀 脱发

Mysql带层级(父子级)的递归查询

需求

组织之间存在层级关系,人员可对应多个组织,对应的多个组织也可以存在上下级关系。 查询某个人的组织的时候,需要把这个人对应的所有组织,和对应的每一个组织的所有上级都按序查询出来,并且根据组织id查询时,需要把该组织及该组织的所有子级组织的人员都查询出来。

PersonListDto
public class PersonListDTO {
          
   

    private Long id;

   
    private String personCode;

 
    private String name;


    private String position;

    private List<OrganizationReleaseDTO> organizationReleaseDTOList;

    private Date createTime;
}
OrganizationReleaseDTO
public class OrganizationReleaseDTO {
          
   
    private Long id;

    private List<String> organizationNameList;
}
PersonMapper.xml
OrganizationMaper.xml

再看一个OrganizationMaper.xml中的一个示例:

<select id="selectRegionIdByOrganizationId" resultType="java.lang.Long">
    SELECT
        orr.region_id
    FROM
        organization_region orr
            INNER JOIN (
            SELECT
                mr.id
            FROM
                (SELECT @ids := 0) b,
                (SELECT
                      @ids AS _ids,
                      (SELECT 
                       		@ids := GROUP_CONCAT(id) 
                       FROM 
                       		merchant_region 
                       WHERE 
                      		FIND_IN_SET(parent_id, @ids)
                      ) AS cids
                 FROM 
                 	 merchant_region
                 WHERE
                     @ids IS NOT NULL) c1,
                merchant_region mr
                LEFT JOIN merchant_user_region mur ON mr.id = mur.merchant_region_id
            where
                FIND_IN_SET(mr.id, c1._ids)
              	AND mr.is_del = 0
              	AND mur.merchant_sub_user_id = #{merchantSubUserId}
            ORDER BY mr.create_time DESC) mr ON mr.id = orr.region_id
    WHERE
        orr.organization_id = #{id}
</select>
经验分享 程序员 微信小程序 职场和发展