使用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中文網其他相關文章!