使用 MySQL 查询遍历行并创建递归树
问题陈述
中包含项目和父列的物料清单 (BOM) 表,您需要检索显示父子关系的递归树结构。所需的输出可能涉及多个层次结构级别,但目前,您只能获取单个级别或检索所有记录并使用递归函数手动对它们进行排序,这可能效率低下。
解决方案
虽然MySQL本身不支持递归树遍历,但您可以利用存储过程来实现该功能。一种方法涉及创建三个存储过程:
通过调用这些存储过程起始物料ID,可以递归遍历BOM表中的行并构建所需的树
示例存储过程:
CREATE PROCEDURE GetFamilyTree(IN start_item_id INT) BEGIN # Declare variables DECLARE parent_id INT; DECLARE ancestry VARCHAR(255); DECLARE done TINYINT DEFAULT 0; # Loop through item IDs until done WHILE NOT done DO # Get parent ID CALL GetParentIDByID(start_item_id, parent_id); # If parent ID is null, we're done IF parent_id IS NULL THEN SET done = 1; LEAVE; END IF; # Append parent ID to ancestry SET ancestry = CONCAT(ancestry, ',', parent_id); # Set current item ID to parent ID SET start_item_id = parent_id; END WHILE; # Return ancestry as result SELECT ancestry; END
用法:
检索从项目 ID 开始的家谱1、调用存储过程:
CALL GetFamilyTree(1);
结果将是包含项目 1 的祖先的逗号分隔字符串。
以上是MySQL存储过程如何解决物料清单表中的递归树遍历?的详细内容。更多信息请关注PHP中文网其他相关文章!