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! Das könnte Sie auch interessieren:
|
<<: Lösung für den Fehler beim Aufruf von Yum im Docker-Container
>>: jQuery implementiert dynamische Tag-Ereignisse
1. Im vorherigen Kapitel haben wir gelernt, dass ...
Inhaltsverzeichnis Vorwort VMware-Klon virtueller...
0. Einleitung Was ist die ibdata1-Datei? ibdata1 ...
Inhaltsverzeichnis brauchen Kernidee Zwei Möglich...
In diesem Artikel wird beschrieben, wie Sie eine ...
Problembeschreibung: In letzter Zeit besteht die ...
Die Ausführungsreihenfolge der SQL-Abfrageanweisu...
Inhaltsverzeichnis Einführung Indexierungsprinzip...
Wenn Sie den FTP-Server häufig in Ihrem Studium o...
Vorwort Aufgrund der Projektanforderungen werden ...
Inhaltsverzeichnis Layoutteil: <div id="a...
Frage Beim Ausführen von gdb im Docker wird ein H...
Inhaltsverzeichnis Verpacken, Starten und Optimie...
Vorwort Da viele Freunde sagen, dass sie keinen M...
1. Übersicht 1.1 Grundlegende Konzepte: Docker is...