Page 1 sur 1

DISTINCT + COUNT

Posté : 24 juin 2013, 13:18
par Zahnzao
Bonjour,

J'arrive pas a construire ma requête pour qu'elle me retourne le nombre de résultats groupés par un DISTINCT.

donc mes tables.

groups (id,name)
galleries (id,groupId)

et groups.id est liée à galleries.groupId

Alors cette requête
SELECT DISTINCT groups.id,groups.name 
FROM groups
INNER JOIN galleries AS gal ON gal.groupId = groups.id
ORDER BY name ASC
me sort les groupes présents dans mes galeries et ignore ceux qui ne sont pas utilisés.

Par contre je voudrai récupérer le nombre de galeries concernées par chaque groupe pour l'afficher entre parenthèse comme sur un blog classique. Je dois sans doute ajouter un count quelques part mais je me retrouve avec des erreurs à chaque fois.

Merci.

Re: DISTINCT + COUNT

Posté : 24 juin 2013, 14:34
par Mazarini
Peut être :
SELECT groups.id,groups.name count(*) 
FROM groups
INNER JOIN galleries AS gal ON gal.groupId = groups.id
GROUP BY groups.id,groups.name
ORDER BY groups.name ASC

Re: DISTINCT + COUNT

Posté : 24 juin 2013, 17:08
par Zahnzao
Ouep ça fonctionne. Merci beaucoup.

J'aurai jamais penser que c'était le distinct qui posait problème.

Je reposte la requête avec la virgule que tu as oubliée (sans vouloir faire le malin) au cas ou quelqu'un atterrirait sur ce topic.
SELECT groups.id, groups.name, COUNT( * ) 
FROM groups
INNER JOIN galleries AS gal ON gal.groupId = groups.id
GROUP BY groups.id, groups.name
ORDER BY name ASC 
Merci à toi.

Re: [RESOLU] DISTINCT + COUNT

Posté : 25 juin 2013, 08:11
par Mazarini
Il me semble que si tu inversais les 2 colonnes du group by, ca pourrait être plus rapide.

Et si tu remplaçais inner par left (ou right ?) et count(*) par count(gal.groupid) tu pourrais avoir les galeries vides.

Re: [RESOLU] DISTINCT + COUNT

Posté : 25 juin 2013, 14:26
par Zahnzao
Ah ok, merci pour l'astuce du group BY même si je ne comprend pas pourquoi ??

Pour le LEFT et le RIGHT je savais ça. Mais ça ne me sera pas utile ici.

Sinon, juste un dernier truc... Bon Anniv !

A+ ;