Maison  >  Article  >  base de données  >  Comment récupérer des catégories récursives à partir d'une base de données MySQL avec une seule requête ?

Comment récupérer des catégories récursives à partir d'une base de données MySQL avec une seule requête ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 10:50:01694parcourir

How to Retrieve Recursive Categories from a MySQL Database with a Single Query?

Récupération de catégories récursives avec une seule requête MySQL

Dans le contexte de l'organisation du contenu d'un site Web, les catégories récursives permettent des structures hiérarchiques à plusieurs niveaux. Pour récupérer efficacement ces catégories à partir d'une base de données MySQL, une seule requête est généralement utilisée.

MySQL propose l'opérateur CONNECT_BY_ROOT, qui permet une sélection récursive de données. Considérons la requête suivante :

SELECT category_id, name, parent
FROM categories
CONNECT BY ROOT parent
ORDER BY LEVEL

Cette requête récupère toutes les catégories du tableau, en les connectant hiérarchiquement en fonction de la colonne parent. La fonction LEVEL attribue un niveau à chaque ligne, indiquant sa position dans la hiérarchie, la catégorie de niveau supérieur ayant un niveau de 1.

Pour construire l'arborescence récursive en PHP, convertissez les résultats de la requête en un tableau, où chaque catégorie est représentée comme un nœud avec une propriété enfants. L'exemple suivant illustre le processus :

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

Ce code PHP construit un tableau multidimensionnel reflétant les relations hiérarchiques entre les catégories. Les catégories de niveau supérieur sont placées dans le tableau $tree et leurs enfants sont imbriqués dans leurs tableaux enfants respectifs.

Cette approche utilise des références aux nœuds, ce qui minimise l'utilisation de la mémoire par rapport à la création de nouveaux objets nœuds. Il évite également les requêtes SQL récursives, ce qui le rend plus efficace pour les grandes arborescences.

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!

Déclaration:
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