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
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;
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!