在一个 SQL 查询中获取所有父行 [英] Getting all parent rows in one SQL query

查看:35
本文介绍了在一个 SQL 查询中获取所有父行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的 MySQL 表,其中包含一个类别列表,级别由 parent_id 决定:

I have a simple MySQL table thats contains a list of categories, level is determined by 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家").可以有任意数量或子行进入无限深度.

I'm attempting to make a breadcrumb trail. So i have the 'id' of the child, I want to get all available parents (iterating up the chain until we reach 0 "Home"). There could be any number or child rows going to an unlimited depth.

目前我正在为每个父级使用 SQL 调用,这很麻烦.SQL 中有没有办法在一个查询中完成所有这些操作?

Currently I am using an SQL call for each parent, this is messy. Is there a way in SQL to do this all on one query?

推荐答案

改编自 这里:

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 是当前页面的页码.结果如下:

The line @r := 5 is the page number for the current page. The result is as follows:

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

这篇关于在一个 SQL 查询中获取所有父行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆