我有一个像这样设置的物料清单表: 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中执行此查询?
如今的MySQL(8)支持递归查询。
考虑到您的表项(id,父级)和id = 1的起始项,以下将完成工作:
with recursive result(id, parent) as (select id, parent from item where id = 1 union all select i.id, i.parent from item i join result on i.parent = result.id) select * from result; 分享来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。