Aller au contenu

Problème de requête


patricia.b

Sujets conseillés

Bonjour,

Cela fait plusieurs jours que j'essaie de trouver la bonne requête à faire (qui est certainement très simple), et je me décide à solliciter votre aide.

J'ai, d'une part, la table "sbbsouscat" (sous-catégories) qui contient, entre autres :

- id

- nom

...

et, d'autre part, la table "sbbproduit" (produits) qui contient, entre autres :

- id

- sid (= id table sbbsouscat)

- libelle

...

Je voudrais afficher une liste des sous-catégories, avec, pour chacune d'elles, entre parenthèses, le nombre de produits qu'elle comprend. Ce qui devrait donner, par exemple :

Produits de senteur (14)

Pigments (10)

etc

Je sais faire la requête pour extraire, lister et afficher les sous-catégories de la table "sbbsouscat" seules, mais je ne sais pas la requête à faire pour que la liste des sous-catégories et le nombre de produits extrait de la table "sbbproduit" se retrouvent l'un après l'autre, sur la même ligne.

Merci par avance de votre coup de main.

Lien vers le commentaire
Partager sur d’autres sites

Merci de cette réponse. Mais, du fait que j'ai des infos à prendre sur deux tables :

- le nom des sous-catégories dans la table "sbbsouscat"

- et le nombre de produits par sous-catégories dans la table "sbbproduit"

je suppose qu'il doit aussi falloir faire une jointure entre les tables, et là, c'est pas encore vraiment "mon truc"...

Lien vers le commentaire
Partager sur d’autres sites

Dans un sens, je comprends, mais dans un autre, c'est dommage, car une réponse avec les commentaires qui vont avec m'auraient permis d'apprendre... ce que je n'ai pas réussi à faire en lisant le manuel mysql....

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Essaies avec ceci :

Select a.nom, count(b.id) from sbbsouscat a inner join sbbproduit b on a.id = b.sid
group by a.nom

Group by te permet de regrouper un champ qui n'est pas contenu dans une fonction d'agrégation (cout, sum, avg etc.)

Portekoi

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

Merci pour cette requête et son commentaire.

Après 4 heures de tâtonnements, j'avais abouti, la nuit dernière, à ceci (qui fonctionne mais est plus long) :

$sql = 'SELECT nom, COUNT(libelle) AS nombre_produits FROM sbbsouscat LEFT JOIN sbbproduit ON sbbsouscat.id =sbbproduit.sid GROUP BY sbbsouscat.id';

Bonne fin de journée.

Lien vers le commentaire
Partager sur d’autres sites

Left join ou Right join servent dans le cas ou une table n'a pas une relation "1 pour 1" ou "1 pour n".

Cela signifierait pour toi que la table "sbbproduit " ne contient pas forcément un "sid" contenu dans la table "sbbsouscat" ce qui est peu probable :)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Merci de cette précision.

Dans les débuts du site (qui n'est pas encore en ligne), certaines sous-catégories n'auront pas encore de produits d'enregistrés et ma table sbbproduit contiendra des "sid" nuls. Donc, sans le faire volontairement, je pense avoir utilisé la bonne fonction...

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...