Verwenden einer MySQL-Abfrage zum Durchlaufen von Zeilen und Erstellen eines rekursiven Baums
Problemstellung
In Wenn Sie eine Stücklistentabelle (BOM) mit Artikel- und übergeordneten Spalten erstellen möchten, müssen Sie eine rekursive Baumstruktur abrufen, die übergeordnete und untergeordnete Elemente anzeigt Beziehungen. Die gewünschte Ausgabe könnte mehrere Hierarchieebenen umfassen, aber derzeit sind Sie darauf beschränkt, entweder eine einzelne Ebene abzurufen oder alle Datensätze abzurufen und sie manuell mithilfe einer rekursiven Funktion zu sortieren, was ineffizient sein kann.
Lösung
Obwohl MySQL selbst die rekursive Baumdurchquerung nicht nativ unterstützt, können Sie gespeicherte Prozeduren verwenden, um die Funktionalität zu erreichen. Ein Ansatz besteht darin, drei gespeicherte Prozeduren zu erstellen:
Durch Aufrufen dieser gespeicherten Prozeduren mit Mit der Startartikel-ID können Sie die Zeilen in der Stücklistentabelle rekursiv durchlaufen und den gewünschten Baum erstellen Struktur.
Beispiel für eine gespeicherte Prozedur:
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
Verwendung:
Zum Abrufen des Stammbaums beginnend mit der Element-ID 1. Rufen Sie die gespeicherte Prozedur auf:
CALL GetFamilyTree(1);
Das Ergebnis ist eine durch Kommas getrennte Zeichenfolge mit die Abstammung von Punkt 1.
Das obige ist der detaillierte Inhalt vonWie können gespeicherte MySQL-Prozeduren den rekursiven Baumdurchlauf in einer Stücklistentabelle lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!