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>