IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Petit problème de count


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Points : 142
    Points
    142
    Par défaut Petit problème de count
    Bonjour tout le monde,

    J'ai un petit problème et je voulais savoir la faisabilité de la requête.

    Voila, j'ai 2 tables :
    avatar { id, nom, icon, groupe }
    avatar_user { id_avatar, id_user }

    et je voudrais avoir la liste des avatars avec le nombre de fois qu'ils ont été utilisés. Une réponse du type {id, nom, icon, groupe, number} pour être plus précis.

    J'ai pensé à quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id, nom, icon, groupe, count( DISTINCT avatar_user.id_avatar ) AS number
    FROM avatar, avatar_user
    GROUP BY id
    mais... bon, si ça fonctionnait, je ne posterais pas ici

    Une idée ?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 169
    Points : 76
    Points
    76
    Par défaut il manque une jointure
    à mon avis voilà ce qui manque à ta requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id, nom, icon, groupe, count( DISTINCT avatar_user.id_avatar ) AS number
    FROM avatar, avatar_user
    where avatar.id=avatar_user.id_avatar
    GROUP BY avatar.id

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Points : 142
    Points
    142
    Par défaut
    Eh bien... j'avais aussi pensé à un truc comme ça mais le soucis, c'est que ça ne me renvoie pas la liste complète des avatars (y compris les inutilisés). Merci quand même pour ton aide.

  4. #4
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,
    c'est normal qu'il ne te renvoie pas les avatars non utilisés, ici la jointure te permet de faire le lien entre les avatars et les utilisateurs.

    Requête qui te permet d'avoir la liste des identifiants des avatars qui sont utilisés avec leur compte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT U.id_avatar, count(U.id_avatar)
    FROM avatar_user as U as number
    GROUP BY A.id_avatar
    Puis tu developpes à partir de ca, la liste des noms des avatars qui sont utilisé avec leur compte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT A.nom, count(U.id_avatar) as number
    FROM avatar_user as U, avatar as A
    WHERE A.id = U.id_avatar
    GROUP BY A.id_avatar
    Il faut maintenant que tu croises ces informations avec la liste des avatars utilisés... A toi de réfléchir un peu...

  5. #5
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    il faut utiliser une jointure externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id, nom, icon, groupe, count( DISTINCT avatar_user.id_avatar ) AS number
    FROM avatar
    LEFT JOIN avatar_user ON avatar.id=avatar_user.id_avatar
    GROUP BY avatar.id

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 126
    Points : 142
    Points
    142
    Par défaut
    Merci beaucoup à tous les deux de vous être intéressés à mon cas

    Effectivement, il fallait utiliser une jointure et... je ne connaissais pas ce genre de chose, je n'ai toujours fait que des requêtes... disons, simples où je contournais ce genre de soucis.

    J'ai lu le manuel de sql à la page join et j'ai maintenant compris à quoi ça servait. J'avais encore une autre erreur dans ma requête mais là, c'était de l'étourderie. Je mets la solution finale au cas où quelqu'un voudrait faire la même chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT id, nom, icon, groupe, count( DISTINCT avatar_user.id_user ) AS number
    FROM avatar
    LEFT JOIN avatar_user ON avatar.id=avatar_user.id_avatar
    GROUP BY avatar.id
    Encore une fois, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] Question + Petit probléme avec COUNT
    Par mohsenuss91 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/04/2013, 10h58
  2. petit problème avec un COUNT()
    Par ctobini dans le forum Requêtes
    Réponses: 4
    Dernier message: 12/12/2007, 16h53
  3. Réponses: 17
    Dernier message: 13/07/2004, 20h37
  4. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo