Heim > Datenbank > MySQL-Tutorial > Wie rufe ich hierarchische Kategoriedaten in PHP/MySQL mit nur einem Datenbankdurchlauf ab?

Wie rufe ich hierarchische Kategoriedaten in PHP/MySQL mit nur einem Datenbankdurchlauf ab?

Linda Hamilton
Freigeben: 2024-10-23 17:46:01
Original
670 Leute haben es durchsucht

How to Retrieve Hierarchical Category Data in PHP/MySQL with Just One Database Pass?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php
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