Maison > base de données > tutoriel mysql > le corps du texte

Comment récupérer des données de catégorie hiérarchique en PHP/MySQL avec un seul passage de base de données ?

Linda Hamilton
Libérer: 2024-10-23 17:46:01
original
539 Les gens l'ont consulté

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

Hiérarchie des catégories en PHP/MySQL

En PHP/MySQL, il est très efficace de stocker des catégories et des sous-catégories dans une structure hiérarchique à l'aide d'un modèle de liste de contiguïté. Pour récupérer efficacement ces données hiérarchiques, nous pouvons utiliser une approche qui ne nécessite qu'un seul passage dans la base de données.

Algorithme de récupération de données en un seul passage

Créons un tableau $refs et un tableau $list, analogue à ce qui a été présenté dans la réponse fournie.

<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>
Copier après la connexion

Cet algorithme construit efficacement une structure de données hiérarchique. Le tableau $refs contient des références à toutes les catégories et le tableau $list contient des références aux catégories de niveau supérieur (celles sans parent).

Génération de liste récursive

Pour afficher la structure hiérarchique sous forme de liste HTML, une fonction récursive comme la suivante peut être utilisée :

<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>
Copier après la connexion

Cette fonction construit de manière récursive une liste HTML, représentant efficacement les données hiérarchiques obtenues à partir de la base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!