MySQL-Methode zum rekursiven Suchen nach allen untergeordneten Knoten eines Menüknotens

MySQL-Methode zum rekursiven Suchen nach allen untergeordneten Knoten eines Menüknotens

Hintergrund

Im Projekt besteht die Anforderung, alle Knoten des Menüknotens zu überprüfen. Nach der Online-Überprüfung verwenden die meisten Methoden gespeicherte Prozeduren. Da die Online-Umgebung gespeicherte Prozeduren nicht beiläufig hinzufügen kann,

Daher wird hier eine ähnliche rekursive Methode verwendet, um alle untergeordneten Knoten des Menüs abzufragen.

Vorbereiten

Erstellen Sie eine Menütabelle:

CREATE TABLE `Menü` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Menü-ID',
 `parent_id` int(11) DEFAULT NULL COMMENT 'übergeordnete Knoten-ID',
 `menu_name` varchar(128) DEFAULT NULL COMMENT 'Menüname',
 `menu_url` varchar(128) DEFAULT '' COMMENT 'Menüpfad',
 `status` tinyint(3) DEFAULT '1' COMMENT 'Menüstatus 1-gültig; 0-ungültig',
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12212 DEFAULT CHARSET=utf8;

Daten einfügen:

INSERT INTO `menu` VALUES ('0', null, 'Menu0', ' ', '1');
INSERT INTO `menu` VALUES ('1', '0', 'Menü 1', '', '1');
INSERT INTO `menu` VALUES ('11', '1', 'Menü 11', '', '1');
INSERT INTO `menu` VALUES ('12', '1', 'Menü 12', '', '1');
INSERT INTO `menu` VALUES ('13', '1', 'Menü 13', '', '1');
INSERT INTO `menu` VALUES ('111', '11', 'Menü 111', '', '1');
INSERT INTO `menu` VALUES ('121', '12', 'Menü 121', '', '1');
INSERT INTO `menu` VALUES ('122', '12', 'Menü 122', '', '1');
INSERT INTO `menu` VALUES ('1221', '122', 'Menü 1221', '', '1');
INSERT INTO `menu` VALUES ('1222', '122', 'Menü 1222', '', '1');
INSERT INTO `menu` VALUES ('12211', '1222', 'Menü 12211', '', '1');

Die resultierende Verzeichnisstruktur wird unten angezeigt:

Abfrage

Posten Sie zuerst die SQL-Anweisung:

Wenn Sie beispielsweise alle untergeordneten Knoten des Menüknotens 12 abfragen, lauten die Abfrageergebnisse:

analysieren

Analysieren Sie zunächst die Anweisungen nach from, sortieren Sie nach parent_id und id und verwenden Sie den abzufragenden Menüknoten als Variable. Das Ergebnis nach from ist

Als nächstes schauen wir uns die bedingte Anweisung if (express1, express2, express3) an. Die if-Anweisung ähnelt einem ternären Operator. Wenn exprss1 wahr ist, wird express2 ausgeführt, andernfalls wird express3 ausgeführt.

FIND_IN_SET(str,strlist),str ist die abzufragende Zeichenfolge,strlist-Feldnamenparameter werden durch "," getrennt, z. B. (1,2,6,8), fragen Sie die Ergebnisse ab, die (str) im Feld (strlist) enthalten, und geben Sie das Ergebnis als Null oder Datensatz zurück

Wenn parent_id in @pid enthalten ist, fügen Sie parent_id zu @pid hinzu und führen Sie es zeilenweise aus. Der Ausführungsprozess ist in der folgenden Tabelle dargestellt:

Zu diesem Zeitpunkt ist die angezeigte ID die ID aller untergeordneten Knoten der Menü-ID 12.

Dies ist das Ende dieses Artikels über die rekursive MySQL-Suche nach allen untergeordneten Knoten eines Menüknotens. Weitere relevante Inhalte zur rekursiven MySQL-Suche nach Menüknoten finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Analyse der Prinzipien von MySQL Dirty Page Flush und Shrinking Table Space
  • Empfehlen Sie mehrere MySQL-bezogene Tools
  • Eine kurze Analyse der LRU-verknüpften Liste von MySQL
  • MySQL-Abfrage-Cache und Pufferpool
  • Eine kurze Analyse der MySQL-Kardinalitätsstatistiken
  • Was ist ein MySQL-Tablespace?
  • So finden Sie langsame MySQL-Abfragen
  • MySQL Flush-List und Flushing-Mechanismus für Dirty Pages

<<:  Schreiben Sie eine dynamische Uhr auf einer Webseite in HTML

>>:  Detaillierte Schritte zur Installation von Nginx unter Linux

Artikel empfehlen

So aktivieren Sie die Protokollfunktion für langsame Abfragen in MySQL

Das MySQL-Protokoll für langsame Abfragen ist seh...

Detaillierte Erläuterung des Grafikbeispiels für Vue-Überwachungsattribute

Inhaltsverzeichnis Was ist die Listener-Eigenscha...

Erklärung zur Verwendung von JavaScript ECharts

Ich habe ECharts schon einmal bei einem Projekt v...

Hinweise zur IE8-Kompatibilität, die mir aufgefallen sind

1. getElementById von IE8 unterstützt nur IDs, nic...

Detaillierte Erklärung der Kernfunktionen und der Ereignisbehandlung von jQuery

Inhaltsverzeichnis Ereignis Seite wird geladen Ve...

Implementierung eines Web-Rechners mit nativem JavaScript

In diesem Artikel wird der spezifische JavaScript...

WeChat-Applet-Picker - Mehrspalten-Selektor (Modus = MultiSelector)

Inhaltsverzeichnis 1. Wirkungsdiagramm (mehrere S...

Einige Referenzen zu Farben in HTML

In HTML werden Farben auf zwei Arten dargestellt. ...

Mybatis-Implementierungsmethode für Fuzzy-Abfragen

Mybatis-Implementierungsmethode für Fuzzy-Abfrage...

Implementierung von Docker zum Erstellen eines Zookeeper- und Kafka-Clusters

Ich habe vor Kurzem Kafka gelernt. Als ich mich d...

Detaillierte Erklärung dieses Zeigeproblems in JavaScript

Vorwort Der This-Zeiger in JS hat Anfängern schon...

Einige Tipps zum Schreiben leistungsstarker HTML-Anwendungen

Wie können Sie die Leistung einer Webseite verbes...