zoukankan      html  css  js  c++  java
  • mysql递归查询从子类ID查询所有父类

    先来看数据表的结构如下:


    id  name    parent_id 
    --------------------------- 
    1   Home        0 
    2   About       1 
    3   Contact     1 
    4   Legal       2 
    5   Privacy     4 
    6   Products    1 
    7   Support     1 
    我要的要求是根据一个分类ID(这个分类ID可能是一个子分类),得到所有的父分类,下面是相应的SQL:

    方式一:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT T2.id, T2.name 
    FROM 
        SELECT 
            @r AS _id, 
            (SELECT @r := parent_id FROM table1 WHERE id = _id) AS parent_id, 
            @l := @l + 1 AS lvl 
        FROM 
            (SELECT @r := 5, @l := 0) vars, 
            table1 h 
        WHERE @r <> 2
        union all select @r, parent_id,@l+1 FROM table1 WHERE id = @r
        ) T1
    JOIN table1 T2 
    ON T1._id = T2.id 
    ORDER BY T1.lvl DESC 

     方式二:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT T2.id, T2.name 
    FROM 
        SELECT 
            @r AS _id, 
            @stop:=@stop+if(@r=2,1,@stop) as stop,
            (SELECT @r := parent_id FROM table1 WHERE id = _id) AS parent_id, 
            @l := @l + 1 AS lvl 
        FROM 
            (SELECT @r := 5, @l := 0, @stop:=0) vars, 
            table1 h 
        WHERE @stop < 1) T1 
    JOIN table1 T2 
    ON T1._id = T2.id 
    ORDER BY T1.lvl DESC 
  • 相关阅读:
    IMP-00010: 不是有效的导出文件,标题验证失败
    ORA-01261: Parameter db_recovery_file_dest destination string cannot be translat
    oracle启动,提示“LRM-00109: could not open parameter file”
    Linux下oracle数据库启动和关闭操作
    YARN学习总结之架构
    HDFS读写流程
    HDFS学习总结之API交互
    IO编程之NIO
    IO编程之对象序列化
    IO编程之IO流
  • 原文地址:https://www.cnblogs.com/interdrp/p/8045999.html
Copyright © 2011-2022 走看看