我得到了这个表结构:
-----------------------------------
Name DocID ParentID
-----------------------------------
doc1 1 NULL
doc2 2 1
doc3 3 NULL
doc4 4 3
doc5 5 1
查询应该输出父节点和子节点的树结构,该级别可以具有任何值。 输出就是这样:
doc1
| --doc2
| --doc5
|
doc3
--doc4
你能帮助在mysql中通过简单或递归查询在mysql中做到这一点吗?
答案 0 :(得分:0)
为您的数据模型(称为邻接列表)编写类似的查询将相对复杂且效率低下。如果您确实需要这样做,请查看http://www.artfulsoftware.com/mysqlbook/sampler/mysqled1ch20.html#adjacency_list_model。
如果您不介意更改数据模型,有两种方法:
或者,您可以将每个文档的完整分层路径(如面包屑)存储在新列中。类似的东西:
------
Path
------
doc1
doc1>doc2
doc1>doc5
doc3
doc3>doc4
第二种方法允许您在“Path”上使用ORDER BY进行简单的SELECT。然后你可以查看“>”的数量(或者您使用的任何字符)来确定文档在层次结构中的级别(在UI中缩进多少)。
第二种方法并不理想,因为它需要更多维护。如果更改了一个父子关系,则最终必须重新生成所有路径。嵌套集也涉及相当多的行更新,但它的效率非常高。