Heim >Datenbank >MySQL-Tutorial >Wie rufe ich alle untergeordneten und untergeordneten Ordner in einer hierarchischen Datenbank mit einer einzigen SQL-Abfrage ab?

Wie rufe ich alle untergeordneten und untergeordneten Ordner in einer hierarchischen Datenbank mit einer einzigen SQL-Abfrage ab?

Barbara Streisand
Barbara StreisandOriginal
2024-11-02 03:00:30449Durchsuche

How to Retrieve All Child and Subchild Folders in a Hierarchical Database using a Single SQL Query?

Rekursive Abfrage zum Abrufen aller untergeordneten und untergeordneten Ordner in MySQL

Frage:

Wie Kann ich eine einzelne SQL-Abfrage entwerfen, um alle untergeordneten und untergeordneten Ordner für eine bestimmte übergeordnete Ordner-ID in einer hierarchischen Datenbank abzurufen?

Szenario:

Betrachten Sie einen Tabellenordner mit die folgende Struktur:

CREATE TABLE IF NOT EXISTS `Folder` (
    `idFolder` INT(11) NOT NULL AUTO_INCREMENT,
    `FolderName` VARCHAR(150) NOT NULL,
    `idFolderParent` INT(11) NULL,
    PRIMARY KEY (`idFolder`),
    CONSTRAINT `fk_1`
    FOREIGN KEY (`idFolderParent`)
    REFERENCES `Folder` (`idFolder`)
);

Die Tabelle wird wie folgt gefüllt:

idFolder FolderName idFolderParent
1 ADoc NULL
2 ADoc1 1
3 ADoc2 2
4 ADoc3 3
5 ADoc4 4
6 ADoc5 5
7 ADoc6 4

Problemstellung:

Wir möchten eine Abfrage entwerfen das alle untergeordneten und untergeordneten Ordner für eine bestimmte übergeordnete Ordner-ID zurückgibt. Zum Beispiel:

  • Für die übergeordnete Ordner-ID 1 sollte die Abfrage [2, 3, 4, 5, 6, 7] zurückgeben.
  • Für die übergeordnete Ordner-ID 4 sollte die Abfrage sollte [5, 7, 6] zurückgeben.
  • Für die übergeordnete Ordner-ID 3 sollte die Abfrage [4, 5, 6, 7] zurückgeben.

Lösung:

Die folgende Abfrage verwendet eine rekursive Technik, um das gewünschte Ergebnis zu erzielen:

<code class="sql">SELECT GROUP_CONCAT(lv SEPARATOR ',') 
FROM (
    SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder 
    WHERE FIND_IN_SET(idFolderParent, @pv)) AS lv 
    FROM Folder 
    JOIN (SELECT @pv:=5) tmp
) a;</code>

Erklärung:

  • Die Abfrage verwendet eine benutzerdefinierte Variable @pv, um die durch Kommas getrennte Liste der untergeordneten Ordner-IDs für die aktuelle Ebene zu speichern.
  • Die Unterabfrage in der SELECT-Anweisung ruft die untergeordneten Ordner-IDs für die aktuelle Ebene ab und trennt sie durch Kommas .
  • Die äußere Abfrage verkettet dann die Ergebnisse aller Ebenen und stellt eine durch Kommas getrennte Liste aller untergeordneten und untergeordneten Ordner-IDs für das angegebene übergeordnete Element bereit.

Das obige ist der detaillierte Inhalt vonWie rufe ich alle untergeordneten und untergeordneten Ordner in einer hierarchischen Datenbank mit einer einzigen SQL-Abfrage ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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