Heim  >  Artikel  >  Datenbank  >  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
Linda HamiltonOriginal
2024-10-23 17:46:01540Durchsuche

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>

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!

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