mysql用一句sql獲取無限上級/下級


之前項目里要用到無限上下級的sql,在度娘里翻了十幾頁都是復制粘貼還不管對錯的,真的是沒人品!好氣,只好靜下心自己慢慢研究他們錯誤的地方,慢慢改過來了!希望幸運兒最先看到的是我的這個,不用像我當初那樣悲催

 1 //查詢無限下級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!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM