Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie rufe ich mit einer einzigen Abfrage rekursive Kategorien aus einer MySQL-Datenbank ab?

Barbara Streisand
Freigeben: 2024-11-08 10:50:01
Original
693 Leute haben es durchsucht

How to Retrieve Recursive Categories from a MySQL Database with a Single Query?

Rekursive Kategorien mit einer einzigen MySQL-Abfrage abrufen

Im Zusammenhang mit der Organisation von Website-Inhalten ermöglichen rekursive Kategorien hierarchische Strukturen mit mehreren Ebenen. Um solche Kategorien effizient aus einer MySQL-Datenbank abzurufen, wird normalerweise eine einzelne Abfrage verwendet.

MySQL bietet den CONNECT_BY_ROOT-Operator, der eine rekursive Auswahl von Daten ermöglicht. Betrachten Sie die folgende Abfrage:

SELECT category_id, name, parent
FROM categories
CONNECT BY ROOT parent
ORDER BY LEVEL
Nach dem Login kopieren

Diese Abfrage ruft alle Kategorien in der Tabelle ab und verbindet sie hierarchisch basierend auf der übergeordneten Spalte. Die LEVEL-Funktion weist jeder Zeile eine Ebene zu und gibt ihre Position innerhalb der Hierarchie an, wobei die Kategorie der obersten Ebene eine Ebene von 1 hat.

Um die rekursive Baumstruktur in PHP zu erstellen, konvertieren Sie die Abfrageergebnisse in eine Array, in dem jede Kategorie als Knoten mit einer Kindereigenschaft dargestellt wird. Das folgende Beispiel veranschaulicht den Prozess:

$nodeList = [];
$tree = [];

$query = mysql_query("SELECT category_id, name, parent FROM categories ORDER BY parent");
while ($row = mysql_fetch_assoc($query)) {
    $nodeList[$row['category_id']] = array_merge($row, ['children' => []]);
}

foreach ($nodeList as $nodeId => &$node) {
    if (!$node['parent'] || !array_key_exists($node['parent'], $nodeList)) {
        $tree[] = &$node;
    } else {
        $nodeList[$node['parent']]['children'][] = &$node;
    }
}
unset($node);
unset($nodeList);

// Return the tree structure
return $tree;
Nach dem Login kopieren

Dieser PHP-Code erstellt ein mehrdimensionales Array, das die hierarchischen Beziehungen zwischen Kategorien widerspiegelt. Die Kategorien der obersten Ebene werden im $tree-Array platziert und ihre untergeordneten Elemente werden in ihren jeweiligen untergeordneten Arrays verschachtelt.

Dieser Ansatz nutzt Verweise auf Knoten, was den Speicherverbrauch im Vergleich zur Erstellung neuer Knotenobjekte minimiert. Außerdem werden rekursive SQL-Abfragen vermieden, wodurch die Arbeit bei großen Baumstrukturen effizienter wird.

Das obige ist der detaillierte Inhalt vonWie rufe ich mit einer einzigen Abfrage rekursive Kategorien aus einer MySQL-Datenbank ab?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage