2011-09-04 4 views
1

J'utilise PHP via Codeigniter pour ce scénario.Récupération et affichage des catégories et de leurs enfants nombre

Il s'agit d'une liste de catégories de base pour laquelle des éléments sont affectés à ces catégories. Ce qui me pose problème, c'est de montrer le nombre d'objets à côté des noms de catégorie sur la page de liste des catégories. Comment je le faisais était très inefficace, je pense, et j'aimerais vraiment savoir quelle serait la pratique courante pour ce genre de chose. Donc, je recevais la liste des catégories dans mon contrôleur, puis à mon avis, sur la boucle à travers les catégories, j'appelle une méthode de modèle pour saisir le compte du cat_id respectif à chaque itération. (! Horreur)

Dois-je être:

A) Obtenir les catégories et il est produit compter de 1 instruction SQL

OU

B) Traiter la liste des catégories dans le contrôleur et obtenir le nombre d'éléments correspondants dans le contrôleur

Si oui, comment?

+0

quel code avez-vous montrer? Vous pouvez probablement faire tout cela avec une instruction SQL légèrement modifiée – Soren

+0

Le code que j'ai sont toutes les requêtes standard et foreach liste de boucles, donc je pensais que ce n'était pas la peine de coller. Ce que je cherche vraiment, c'est la grande image de savoir si obtenir cette information purement dans une requête sql, ou obtenir plusieurs requêtes et les combiner dans un tableau sur le côté du contrôleur avant de le passer à la vue ... – Winterain

Répondre

4

Je préférerais avoir une requête avec tout ce dont j'ai besoin, si votre conception de base de données le permet.

En supposant que vous avez une table Catégories et une table de produits, vous devriez être en mesure de faire quelque chose comme ceci:

Select C.Category, Count(P.Id) as ProductsCount 
From Categories C left join Products P on C.Id = P.Category_Id 
Group by C.Category  
Order by C.Category 
+0

Cela semble efficace! :) – Winterain

+0

Cela n'affiche pas les catégories avec 0 produits. Y a-t-il un moyen de contourner cela? – Winterain

+0

Ceci devrait montrer des produits avec zéro produits parce que c'est une jointure gauche pas une jointure interne. Mis à jour ma réponse, il a le groupe manquant par désolé – Iridio

Questions connexes