需求:查询下表中所有的下级
userid是用户id, higherid 上级人员的用户Id,
---------------------------------------------------------------SELECT
@ids,
( SELECT @ids := GROUP_CONCAT(userid)
FROM dk_user_level
WHERE FIND_IN_SET(higherid, @ids)
) as cids,
@l := @l+1 as lvl
FROM dk_user_level,
(SELECT @ids := 95, @l := 0 ) b
WHERE @ids IS NOT NULL
根据“,”号进行切割数据,把一条数据切割为多条数据
SELECT
x.*
FROM
(
SELECT
a.type,
a.`level`,
substring_index( substring_index( a.cids, ',', b.help_topic_id + 1 ), ',',- 1 ) AS userId
FROM
(
SELECT LEVEL
,
( SELECT @ids := GROUP_CONCAT( userid ) FROM dk_user_level WHERE FIND_IN_SET( higherid, @ids ) ) AS cids,
@l := @l + 1 AS type
FROM
dk_user_level,
( SELECT @ids := 104, @l := 0 ) b
WHERE
@ids IS NOT NULL
) a
JOIN mysql.help_topic b ON b.help_topic_id <( length( a.cids ) - length( REPLACE ( a.cids, ',', '' ) ) + 1 )
) x
4,加入项目进行处理
SELECT
x.*,
u.user_name AS userName
FROM
(
SELECT
a.type,
a.`level`,
substring_index( substring_index( a.cids, ',', b.help_topic_id + 1 ), ',',- 1 ) AS userId
FROM
(
SELECT LEVEL
,
( SELECT @ids := GROUP_CONCAT( userid ) FROM dk_user_level WHERE FIND_IN_SET( higherid, @ids ) ) AS cids,
@l := @l + 1 AS type
FROM
dk_user_level,
( SELECT @ids := #{id}, @l := 0 ) b
WHERE
@ids IS NOT NULL
) a
JOIN mysql.help_topic b ON b.help_topic_id <( length( a.cids ) - length( REPLACE ( a.cids, ',', '' ) ) + 1 )
) x
LEFT JOIN dk_user u ON x.userId = u.id
1=1
and x.type=#{type}
and x.type <>#{type}
and x.level=#{level}
后续会贴出详细的步骤,以及查询所有上级