使用 MySQL 变量选择分层数据
Selecting hierarchical data using MySQL variable
我有一个 table 存储目录信息的地方(比如在文件系统中)。每个目录(命名节点)都有一个 nodeid
和一个 parentid
。我想尽可能高效地检索完整路径。为此,我试图使以下查询有效,但这些 return 只是预期的第一行(实际上是最里面的目录)。任何人都可以帮助获得完整的结果集,以便也选择给定 directory/node 的所有分层父级。
我目前正在试验的查询:
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
有人可以帮忙吗?
您错过了订购数据的需求。尝试以下操作: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 |
我有一个 table 存储目录信息的地方(比如在文件系统中)。每个目录(命名节点)都有一个 nodeid
和一个 parentid
。我想尽可能高效地检索完整路径。为此,我试图使以下查询有效,但这些 return 只是预期的第一行(实际上是最里面的目录)。任何人都可以帮助获得完整的结果集,以便也选择给定 directory/node 的所有分层父级。
我目前正在试验的查询:
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
有人可以帮忙吗?
您错过了订购数据的需求。尝试以下操作: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 |