Heim > Datenbank > MySQL-Tutorial > Wie können gespeicherte MySQL-Prozeduren den rekursiven Baumdurchlauf in einer Stücklistentabelle lösen?

Wie können gespeicherte MySQL-Prozeduren den rekursiven Baumdurchlauf in einer Stücklistentabelle lösen?

DDD
Freigeben: 2024-12-04 16:26:14
Original
325 Leute haben es durchsucht

How Can MySQL Stored Procedures Solve Recursive Tree Traversal in a Bill of Materials Table?

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:

  1. GetParentIDByID: Ruft die übergeordnete ID einer bestimmten Element-ID ab.
  2. GetAncestry: Gibt zurück alle Vorfahren (Eltern und Großeltern) eines bestimmten Artikels ID.
  3. GetFamilyTree: Kombiniert die Funktionalität von GetParentIDByID und GetAncestry, um einen vollständigen Stammbaum für eine bestimmte Element-ID zu generieren.

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
Nach dem Login kopieren

Verwendung:

Zum Abrufen des Stammbaums beginnend mit der Element-ID 1. Rufen Sie die gespeicherte Prozedur auf:

CALL GetFamilyTree(1);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage