资讯专栏INFORMATION COLUMN

MYSQL 查找所有的父级或子级(多级)

weapon / 2471人阅读

摘要:语句的作用如果用程序查询的话,要用递归多次查询数据库,很慢,也增加了服务器的压力,后来发现用一句就能直接返回所有的父级或子级用户表查找父级例子语句查找所有父级包含本身筛选结果查找子级例子语句查找所有子级不包含本身筛选结果查找子级是同事写的,

语句的作用

如果用php程序查询的话,要用递归多次查询数据库,很慢,也增加了服务器的压力,后来发现用一句sql就能直接返回所有的父级或子级

用户表

t_id  |  parent_id  
1     |  0  
2     |  1
3     |  0 
4     |  2
5     |  4
查找父级例子

sql语句 查找所有父级(包含本身)

SELECT T2.t_id
            FROM (
                  SELECT
                    @r AS _id,
                    (SELECT @r := parent_id FROM t_user WHERE t_id = _id) AS parent_id,
                    @l := @l + 1 AS lvl FROM (SELECT @r := 5, @l := 0) vars,
                    t_user h WHERE @r <> 0 AND parent_id > 0
                 ) T1 JOIN t_user T2 ON T1._id = T2.t_id ORDER BY T1.lvl DESC

筛选结果

|t_id|
|1   | 
|2   | 
|4   | 
|5   | 
查找子级例子

sql语句 查找所有子级(不包含本身)

SELECT t_id FROM
  (
    SELECT * FROM t_user where parent_id > 0 ORDER BY parent_id, t_id DESC
  ) realname_sorted,
  (SELECT @pv :=1) initialisation
  WHERE (FIND_IN_SET(parent_id,@pv)>0 And @pv := concat(@pv, ",", t_id)) 

筛选结果

|t_id|
|2   | 
|4   | 
|5   | 

查找子级是同事写的,查找父级是自己写的,记下来方便以后用

根据一级节点查找对应的二级子节点数量

SELECT t_id, ( SELECT count(a.parent_id) FROM t_user a WHERE a.parent_id = b.t_id) count FROM t_user b WHERE b.parent_id = 0

筛选结果

|t_id|count
|1   | 1
|3   | 0
参考文章
http://blog.csdn.net/itchiang/article/details/9270245

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17565.html

相关文章

  • 开源跨平台移动项目Ngui【CSS样式表规则及用法】

    摘要:简介这是一个的排版显示引擎和跨平台的应用程序开发框架,基于,这也是第一个在移动端融合的前端项目,至此成为了真正意义上前后端通吃的语言。样式表名称规则非常抱歉的告诉各位,现在的样式表体系只支持并不支持与。上面与表示其实是同一个名称。 Ngui简介 这是一个GUI的排版显示引擎和跨平台的GUI应用程序开发框架,基于NodeJS/OpenGL,这也是第一个在移动端Android/iOS融合N...

    arashicage 评论0 收藏0
  • html5与css3阶段复习题

    摘要:将超出对象尺寸的内容进行裁剪,不会出现滚动条。过渡效果使用动画使用需要触发一个事件才会随着时间改变其属性在不需要触发任何事件的情况下,也可以显式的随时间变化来改变元素属性,达到一种动画的效果动画不需要事件触发,过渡需要。 1.请列出核心选择器、层次选择器有哪些 (5) 核心选择器:id选择器、class选择器、标签选择器、逗号选择器、普遍选择器 层次选择器:子代选择器、后代选择器、下...

    techstay 评论0 收藏0

发表评论

0条评论

weapon

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<