小编典典

使用MySQL变量选择分层数据

sql

我有一个表,用于存储目录信息(例如在文件系统中)。每个目录(命名节点)都有一个nodeid和一个parentid。我想尽可能有效地检索完整路径。为此,我试图使以下查询正常工作,但是这些查询仅返回预期的第一行(实际上是最里面的目录)。任何人都可以帮助获取完整的结果集,以便也选择给定目录/节点的所有层次结构父级。

我目前正在尝试的查询:

SET @var:= 8;
SELECT * , @var:=parentid FROM `app_nodes` WHERE nodeid IN ( @var )

选择:

SET @var:= 8;
SELECT * , @var:=parentid FROM `app_nodes` WHERE nodeid=@var

选择:

SET @var:= 8;
SELECT * FROM `app_nodes` WHERE nodeid=@var AND (@var:=parentid)
#the parentid of the first parent is '0', so I expect it to end there.

样本数据:

nodeid      parentid
1           0
2           0
3           0
4           0
5           3
6           5
7           0
8           6
9           0
10          0
11          5
12          6
13          11
14          11

所需的输出:

nodeid      parentid
3           0
5           3
6           5
8           6

谁能帮忙吗?


阅读 173

收藏
2021-04-28

共1个答案

小编典典

您已经错过了订购数据的需要。请尝试以下操作:SQL Fiddle

select t.nodeid, @pv := t.parentid parentid
from (select * from table1 order by nodeid desc) t
join (select @pv := 8) tmp
where t.nodeid = @pv

输出:

| NODEID | PARENTID |
|--------|----------|
|      8 |        6 |
|      6 |        5 |
|      5 |        3 |
|      3 |        0 |
2021-04-28