Kategoriehierarchie in PHP/MySQL
In PHP/MySQL ist es äußerst effizient, Kategorien und Unterkategorien mithilfe einer hierarchischen Struktur zu speichern Adjazenzlistenmodell. Um diese hierarchischen Daten effektiv abzurufen, können wir einen Ansatz verwenden, der nur einen Datenbankdurchlauf erfordert.
One-Pass-Datenabrufalgorithmus
Lassen Sie uns ein $refs-Array erstellen und ein $list-Array, analog zu dem, was in der bereitgestellten Antwort dargestellt wurde.
<code class="php">$refs = []; $list = []; $sql = "SELECT category_id, parent_id, name FROM categories ORDER BY name"; $result = $pdo->query($sql); foreach ($result as $row) { $ref = &$refs[$row['category_id']]; $ref['parent_id'] = $row['parent_id']; $ref['name'] = $row['name']; if ($row['parent_id'] == 0) { $list[$row['category_id']] = &$ref; } else { $refs[$row['parent_id']]['children'][$row['category_id']] = &$ref; } }</code>
Dieser Algorithmus erstellt effizient eine hierarchische Datenstruktur. Das Array $refs enthält Verweise auf alle Kategorien, und das Array $list enthält Verweise auf die Kategorien der obersten Ebene (diejenigen ohne übergeordnetes Element).
Rekursive Listengenerierung
Um die hierarchische Struktur als HTML-Liste auszugeben, kann eine rekursive Funktion wie die folgende verwendet werden:
<code class="php">function toUL(array $array) { $html = '<ul>'; foreach ($array as $value) { $html .= '<li>' . $value['name']; if (!empty($value['children'])) { $html .= toUL($value['children']); } $html .= '</li>'; } $html .= '</ul>'; return $html; }</code>
Diese Funktion erstellt rekursiv eine HTML-Liste und stellt die aus der Datenbank erhaltenen hierarchischen Daten effizient dar.
Das obige ist der detaillierte Inhalt vonWie rufe ich hierarchische Kategoriedaten in PHP/MySQL mit nur einem Datenbankdurchlauf ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!