在一个SQL查询中获取所有父行

前端之家收集整理的这篇文章主要介绍了在一个SQL查询中获取所有父行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个简单的MysqL表,它包含一个类别列表,级别由parent_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’,我想要所有可用的父母(迭代链,直到我们达到0“家”).可能有任何数字或子行成为无限深度.

目前我正在为每个父级使用一个sql调用,这是凌乱的.在sql中有一种方法可以在一个查询上执行此操作吗?

解决方法

改编自 here
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 <> 0) T1
JOIN table1 T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC

@r:= 5行是当前页面页码.结果如下:

1,'Home'
2,'About'
4,'Legal'
5,'Privacy'

猜你在找的MsSQL相关文章