我有一个表,用于存储目录信息(例如在文件系统中)。每个目录(命名节点)都有一个nodeid和一个parentid。我想尽可能有效地检索完整路径。为此,我试图使以下查询正常工作,但是这些查询仅返回预期的第一行(实际上是最里面的目录)。任何人都可以帮助获取完整的结果集,以便也选择给定目录/节点的所有层次结构父级。
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
谁能帮忙吗?
您已经错过了订购数据的需要。请尝试以下操作: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 |