MySQL verwendet benutzerdefinierte Funktionen, um die übergeordnete ID oder untergeordnete ID rekursiv abzufragen

MySQL verwendet benutzerdefinierte Funktionen, um die übergeordnete ID oder untergeordnete ID rekursiv abzufragen

Hintergrund:

Wenn es in MySQL eine begrenzte Ebene gibt, können wir beispielsweise die maximale Tiefe des Baums im Voraus bestimmen, sodass die Tiefe aller Bäume mit Knoten als Wurzeln die maximale Tiefe des Baums nicht überschreitet. In diesem Fall können wir dies direkt über einen Left Join implementieren.

Aber oft können wir die Tiefe des Baumes weder kontrollieren noch kennen. Derzeit müssen Sie gespeicherte Prozeduren (Funktionen) in MySQL verwenden oder zur Implementierung Rekursion im Programm einsetzen. In diesem Artikel wird erläutert, wie Sie Funktionen in MySQL verwenden, um Folgendes zu erreichen:

1. Umweltvorbereitung

1. Erstellen Sie eine Tabelle

CREATE TABLE `Tabellenname` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `status` int(255) NULL DEFAULT NULL,
 `pid` int(11) NULL DEFAULT NULL,
 PRIMÄRSCHLÜSSEL (`id`) MIT BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamisch;

2. Daten einfügen

INSERT INTO `table_name` VALUES (1, 12, 0);
INSERT INTO `table_name` VALUES (2, 4, 1);
INSERT INTO `table_name` VALUES (3, 8, 2);
INSERT INTO `table_name` VALUES (4, 16, 3);
INSERT INTO `table_name` VALUES (5, 32, 3);
INSERT INTO `table_name` VALUES (6, 64, 3);
INSERT INTO `table_name` VALUES (7, 128, 6);
INSERT INTO `table_name` VALUES (8, 256, 7);
INSERT INTO `table_name` VALUES (9, 512, 8);
INSERT INTO `table_name` VALUES (10, 1024, 9);
INSERT INTO `table_name` VALUES (11, 2048, 10);

2. MySQL-Funktionen schreiben

1. Fragen Sie alle übergeordneten Knoten des aktuellen Knotens ab

Trennzeichen // 
FUNKTION „getParentList“ erstellen (root_id BIGINT) 
   Gibt VARCHAR(1000) zurück. 
   BEGINNEN 
     DECLARE k INT DEFAULT 0;
     DECLARE fid INT DEFAULT 1;
     DECLARE str VARCHAR(1000) DEFAULT '$';
     WÄHREND rootId > 0 DO
       SETZEN Sie fid=(SELECT pid FROM Tabellenname WHERE root_id=id); 
       WENN fid > 0 DANN
         SET str = concat(str,',',fid);  
         SETZEN Sie root_id = fid; 
       ANDERS 
         SETZEN Sie root_id=fid; 
       ENDE, WENN; 
   ENDE WÄHREND;
   RETURN str;
 ENDE //
 Trennzeichen ;

2. Fragen Sie alle untergeordneten Knoten des aktuellen Knotens ab

Trennzeichen //
FUNKTION „getChildList“ erstellen (root_id BIGINT) 
  Gibt VARCHAR(1000) zurück. 
  BEGINNEN 
   DECLARE str VARCHAR(1000); 
   DECLARE cid VARCHAR(1000); 
   DECLARE k INT DEFAULT 0;
   SETZEN Sie str = "$"; 
   SET cid = CAST(root_id AS CHAR);12 WHILE cid IS NOT NULL DO 
        WENN k > 0 DANN
         SET str = CONCAT(str,',',cid);
        ENDE, WENN;
        Wählen Sie Group_Concat (ID) in cid aus Tabellenname, wobei FIND_IN_SET (PID, CID)>0;
        Setze k = k + 1;
   ENDE WÄHREND; 
   RETURN str; 
ENDE // 
Trennzeichen ;

3. Testen

1. Holen Sie sich alle übergeordneten Knoten des aktuellen Knotens

Wählen Sie getParentList(10);

2. Alle Bytes des aktuellen Knotens abrufen

Wählen Sie getChildList(3);

Zusammenfassen

Oben habe ich Ihnen erklärt, wie Sie benutzerdefinierte Funktionen in MySQL verwenden, um die übergeordnete ID oder untergeordnete ID rekursiv abzufragen. Ich hoffe, es wird Ihnen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!
Wenn Sie diesen Artikel hilfreich finden, können Sie ihn gerne abdrucken und dabei bitte die Quelle angeben. Vielen Dank!

Das könnte Sie auch interessieren:
  • Spezifische Implementierung für untergeordnete Knoten und übergeordnete Knoten der rekursiven Abfragebaumtabelle von MySQL
  • Implementierungsmethode der rekursiven MySQL-Baumabfrage
  • So implementieren Sie rekursive Abfragen in MySQL
  • MySql8 WITH RECURSIVE rekursive Abfrage Eltern-Kind-Sammlungsmethode
  • Einfaches Anwendungsbeispiel für rekursive MySQL 8.0-Abfragen

<<:  Lösung für den Fehler beim Aufruf von Yum im Docker-Container

>>:  jQuery implementiert dynamische Tag-Ereignisse

Artikel empfehlen

Ausführliche Erläuterung der InnoDB-Sperren in der MySQL-Technologie

Inhaltsverzeichnis Vorwort 1. Was ist ein Schloss...

So greifen Sie in Docker auf den lokalen Computer (Hostcomputer) zu

Frage Wie greife ich in Docker auf die lokale Dat...

Acht Implementierungslösungen für domänenübergreifendes JS-Frontend

Inhaltsverzeichnis 1. JSONP domänenübergreifend 2...

Parsen von Apache Avro-Daten in einem Artikel

Zusammenfassung: Dieser Artikel zeigt, wie Avro-D...

So implementieren Sie ein Dropdown-Menü für die HTML-Eingabe

Code kopieren Der Code lautet wie folgt: <html...

10 Tipps zum Entwerfen nützlicher, benutzerfreundlicher Webanwendungen

Hier sind 10 Tipps zum Entwerfen benutzerfreundli...

Verwenden von Streaming-Abfragen in MySQL, um Daten-OOM zu vermeiden

Inhaltsverzeichnis 1. Einleitung 2. JDBC implemen...

Vue verwendet Drag & Drop, um einen Strukturbaum zu erstellen

In diesem Artikelbeispiel wird der spezifische Co...

Erfahren Sie in einem Artikel mehr über TypeScript-Datentypen

Inhaltsverzeichnis Grundtypen jeder Typ Arrays Tu...

So lösen Sie das Problem, dass der Docker-Container keinen Vim-Befehl hat

Finden Sie das Problem Als ich heute versuchte, d...