blog actif depuis 1328 jours.

retours d'expériences, codes sources, réflexions, humeurs... d'un webmaster

 

Jeu.

12

Juin

 
contexte :

2 tables jointes,
table_produits (id_produit (PK), id_categorie (FK), nom_produit)
table_categories (id_categorie (PK), nom_categorie)

On cherche à lister les catégories et pour chaque catégorie, récupérer le nombre de produits pour afficher, par exemple:
  • categorie 1 (2 produits)
  • categorie 2 (12 produits)
  • categorie 3 (0 produits)...

Mauvaise méthode
1 première requête de type
SELECT * FROM table_produits
on récupère l'id produit de chaque résultat (que l'on appellera par exemple id_res), et on fait une seconde requête de type
SELECT COUNT(*) FROM table_categorie WHERE id_produit=id_res.
Cette méthode fonctionne très bien. Seul inconvénient, on envoie une requête pour chaque produit. ce qui fait pour n produits n+1 requêtes.

Bonne méthode
On utilise le COUNT SQL avec la jointure
La requête est de type
SELECT table_categories.nom_categorie, COUNT(table_produits.id_produit) AS nombre_categories FROM table_categories LEFT JOIN table_produits ON table_categories.id_categorie=table_produits.id_categorie GROUP BY table_categories.id_categorie
La requête est un peu longue à écrire (il faut lister les champs que l'on veut récupérer, on ne peut pas mélanger * et COUNT(*)) mais on passe de n+1 requêtes à 1 requête (ce qui n'est pas négligeable avec n très grand)

 

Commentaires

Aucun commentaire

 

Ajouter un commentaire

nom / pseudo :
e-mail :

(Votre e-mail ne sera ni exploité, ni divulgué.)

site (facultatif)
 
romualb.com est sur Facebook
<Février 2012 
LunMarMerJeuVenSamDim
  01 02 03 04 05
06 07 08 09 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29