mysql⽤⼀句sql获取⽆限上级下级
之前项⽬⾥要⽤到⽆限上下级的sql,在度娘⾥翻了⼗⼏页都是复制粘贴还不管对错的,真的是没⼈品!好⽓,只好静下⼼⾃⼰慢慢研究他们错误的地⽅,慢慢改过来了!希望幸运⼉最先
看到的是我的这个,不⽤像我当初那样悲催
mysql group by order by1//查询⽆限下级sql
2 SELECT ID.level, DATA.* FROM( //ID.level 这个是查询到第⼏个级别了 2:就是当前⽤户的直属下级,3:就是下级的直推下级!DATA.* 就是所有的⽤户信息
3 SELECT
4 @ids AS _ids,//@会话级变量,不需要声明,直接写直接⽤. 这句话就是给这个变量起个别名,别多想!
5 ( SELECT @ids := GROUP_CONCAT(id)  // group_count 1、功能:将group by产⽣的同⼀个分组中的值连接起来,返回⼀个字符串结果。2、语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
6 FROM member_user
7 WHERE FIND_IN_SET(intro_user, @ids) //FIND_IN_SET 跟in类似,@ids这个变量⾥⾯包含intro_user 这个id的! intro_user 你⾃⼰定义的⽗级id的名字
8 ) AS cids,
9 @l := @l+1 AS LEVEL  //LEVEL  这个level 就是第⼀⾏的ID.leve 没⽤可以不要
10 FROM member_user,
11 (SELECT @ids :='f946aaaf1e9b43a597451f6a8e4ac389', @l := 0 ) b //@ids :='f946aaaf1e9b43a597451f6a8e4ac389'  这个是你要查下级的id
12 WHERE @ids IS NOT NULL
13 ) id, member_user DATA //member_user  就是你的表,所有的都要换了
14 WHERE FIND_IN_SET(DATA.id, ID._ids)
15 ORDER BY ID.level, id
16
17//查询⽆限⽗级sql
18  SELECT T1.lvl,T2.*  //lvl 跟查询⽆限下级的level⼀样
19    FROM (
20        SELECT
21            @r AS _id,  //变量取个别名
22            (SELECT @r := intro_user FROM member_user WHERE id = _id limit 1) AS intro_user, //limit 1不加会报错,因为⼦查询不允许有多个,我当时没加在navicat是没问题,但是项⽬⾥就报错!  intro_user 你的⽗级id的字段 member_user 你的表
23              @l := @l + 1 AS lvl  // T1.lvl 的来历,没⽤可以不要!或者感觉看不懂可以取消了
24        FROM
25            (SELECT @r := '9a61ebfffcc5430480fdd21245b1bf0c',@l := 0) vars, // @r := '9a61ebfffcc5430480fdd21245b1bf0c' 就是你要查的id,@l := 0 定义T1.lvl的初始值为0 没⽤可以取消不要
26            member_user h
27        WHERE intro_user <> 0) T1  //intro_user 你的⽗级id的字段查询条件就是不等于0,可以根据⾃⼰业务做修改
28    JOIN member_user T2
29    ON T1.intro_user = T2.id
30    ORDER BY T1.lvl DESC
这个sql其实静下⼼来,慢慢拆解来看,其实就是⼏个⼦查询,确定了顺序,⾃⼰多看⼏遍就会了!goodluck!