一尘不染

使用MySQL查询遍历行以创建递归树

mysql

我有一个像这样设置的物料清单表:
item-parent

显示物料清单的最终结果是这样显示的:

item 1  - parent 0    
    item 2 - parent 1    
    item 3 - parent 1

最终结果也可能是多级的,如下所示:

item 3 - parent 0    
    item 4 - parent 3    
    item 76 - parent 3

它可以无限进行:

item 76 - parent 0    
    item 46 - parent 76

item 46 - parent 0     
    item 25 - parent 46

现在,我要么只是从数据库中获得1级:

SELECT * FROM bom WHERE parentId = $itemId (shorthand)

或从表中拉出每一行,并使用递归函数仅对所需行进行排序,但这显然效率不高,因为我可能只需要10行,但我拉出10,000条记录。递归函数的输出将只创建一个像这样的树:

item 1
   item 2
   item 3
      item 4
      item 76
         item 46
            item 25

我所知道的是,我从项目1开始。项目5的父级可以为11;项目5的父级可以为11。他们不必顺序进行。我想把所有的子树枝都放在树上。我如何在mysql中执行此查询?


阅读 398

收藏
2020-05-17

共1个答案

一尘不染

早在2011年10月24日,有人 在DBA
StackExchange中
发布了一个
有关MySQL中的树遍历的问题

。MySQL的SQL无法支持它。

回答该问题时 我写下了三(3)个存储过程(
GetParentIDByID,GetAncestry和GetFamilyTree )。希望这些信息可以帮助您构建所需的内容。
****

2020-05-17