我有一个名为table
。它有一个名为id
与类型INT(11)
代表行的标识符,它还有其他字段,但我认为它们与这个问题无关。
我有另一个表名为table_children
。它有一个名为parent
与类型INT(11)
指的是table.id
作为外键。它还有另一个名为child
与类型INT(11)
这也指的是table.id
作为外键。该表描述了table
row to table
行父子关系。
这是一个可能的设置。
table table_children
id parent child
0 0 1
1 1 2
2 1 3
3 3 4
4
我怎样才能得到id
的所有后代0
最少的请求数量?这里的答案是1
, 2
, 3
, 4
.
感谢您的帮助。
使用 MySQL,最简单的方法是存储all树中的路径,创建一个传递闭包 http://en.wikipedia.org/wiki/Transitive_closure.
table_children
parent child
0 0
1 1
2 2
3 3
4 4
0 1
0 2
0 3
0 4
1 2
1 3
1 4
3 4
现在你可以这样查询:
SELECT t.*
FROM table_children c
JOIN table t ON c.child = t.id
WHERE c.parent = 0;
也可以看看:
- 将平面表解析为树的最有效/优雅的方法是什么? https://stackoverflow.com/questions/192220/what-is-the-most-efficient-elegant-way-to-parse-a-flat-table-into-a-tree/192462#192462
- 使用 SQL 和 PHP 的分层数据模型 http://www.slideshare.net/billkarwin/models-for-hierarchical-data
- SQL 反模式第 1 卷:避免数据库编程的陷阱 https://pragprog.com/titles/bksap1/sql-antipatterns-volume-1/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)