5并有以下情况:
我有一个包含两列的数据库表:id(int)
,parentId(int)
。
让我说我的数据看起来像这样
id parentId
1 null
2 1
3 1
4 3
5 3
6 4
7 4
8 6
现在我想编写一个查询,列出所有具有特定元素作为祖先的元素。怎么办呢?
例如,我希望所有具有4作为祖先的元素; 6,7,8
。
答案 0 :(得分:0)
您的表格是adjacency list model分层数据的示例。这有众所周知的局限性,包括无法编写满足您需求的单个查询。 (您可以通过施加深度限制来执行单个查询,但这很痛苦。)
更好的结构是nested set model。有关嵌套集模型如何工作的好文章here,包括大量用于实现它的SQL代码。
答案 1 :(得分:0)
MySQL缺乏其他RDBMS所具有的分层功能,例如MSSQL 公用表表达式(CTE)和Oracle的 connect by ,这使得使用邻接列表变得简单而有效。因此,您必须执行以下操作:
Generating Depth based tree from Hierarchical Data in MySQL (no CTEs)
希望这会有所帮助:)