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

Requêtes MySQL Discussion :

compter le nombre de fois sur 2 colonnes


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Par défaut compter le nombre de fois sur 2 colonnes
    Bonjour,

    J'ai une table avec la structure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id_relation
    a_membre_id
    b_membre_id
    acceptee
    Le membre a est le membre qui demande la relation et le membre b le membre qui reçoit la demande.
    La colonne acceptee est à 0 ou 1 selon si la relation est acceptée ou non.

    Voilà où je bloque.
    Pour une histoire de stats et autre suivis du site je souhaite faire une requête me sortant les membres qui sont le plus de fois dans la table.
    Et cela que se soit le membre demandant ou recevant l'invitation.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id_relation| a_membre_id| b_membre_id| acceptee
    1          |1           |2           |1
    2          |1           |3           |1
    3          |1           |4           |1
    4          |5           |1           |1
    5          |2           |3           |1
    6          |3           |4           |1
    Je voudrais avoir un résultat sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    membre_id| nb_relation
    1         | 4
    3         | 3
    2         | 2
    4         | 2
    5         | 1
    Je ne vois pas comment faire mon group by.

    Quelqu'un peut il m'aider?

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut
    Une requête UNION de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT membre_id, SUM(nb_relations) as nb FROM (
     SELECT a_membre_id as membre_id, COUNT(*) as nb_relations
     FROM relation
     GROUP BY a_membre_id
     UNION ALL
     SELECT b_membre_id as membre_id, COUNT(*) as nb_relations
     FROM relation
     GROUP BY b_membre_id
    ) GROUP BY membre_id
    On commence par compter dans les sous-requêtes (COUNT) et ensuite on additionne (SUM) dans la requête mère.

    C'est assez lourd, mais j'avoue pas trouver mieux pr l'instant :s

  3. #3
    Membre chevronné Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Par défaut
    Bonjour,

    merci pour cette réponse mais j'ai une erreur lors de l'exécution de la requête.

    #1248 - Every derived table must have its own alias
    Si je ne mets que ce qu'il y a dans la parenthèse, le résultat s'affiche correctement.
    C'est lorsque je mets le select sur les deux autres que cela me sors ça.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut
    L'erreur n'est quand même pas compliquée à interpréter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT membre_id, SUM(nb_relations) AS nb FROM (
     SELECT ra.a_membre_id AS membre_id, COUNT(ra.*) AS nb_relations
     FROM relation ra
     GROUP BY ra.a_membre_id
     UNION ALL
     SELECT rb.b_membre_id AS membre_id, COUNT(rb.*) AS nb_relations
     FROM relation rb
     GROUP BY rb.b_membre_id
    ) GROUP BY membre_id

  5. #5
    Membre chevronné Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Par défaut
    oui en effet j'avais essayé de faire des modifications de ce genre.
    La dernière requête que j'exécute est la suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT membre_id, SUM(nb_relations) AS nb FROM (
    SELECT ra.a_membre_id AS membre_id, COUNT(ra.id_relation) AS nb_relations
    FROM relation ra
    GROUP BY ra.a_membre_id
    UNION ALL
    SELECT rb.b_membre_id AS membre_id, COUNT(rb.id_relation) AS nb_relations
    FROM relation rb
    GROUP BY rb.b_membre_id
    ) GROUP BY membre_id
    Mais cela me sortait toujours le même message d'erreur.

    Sinon ta requête me met un autre message d'erreur qui provient des et .
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) AS nb_relations FROM relation ra GROUP BY ra.a_membre_id UNION ALL SE' at line 2
    (ligne 2 : SELECT ra.a_membre_id AS membre_id, COUNT(ra.*) AS nb_relations)
    Et du coup si je remplace par les * par des id_relation cela revient à ma dernière requête avec le premier message d'erreur.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT membre_id, SUM(nb_relations) AS nb FROM (
    SELECT ra.a_membre_id AS membre_id, COUNT(ra.id_relation) AS nb_relations
    FROM relation ra
    GROUP BY ra.a_membre_id
    UNION ALL
    SELECT rb.b_membre_id AS membre_id, COUNT(rb.id_relation) AS nb_relations
    FROM relation rb
    GROUP BY rb.b_membre_id
    ) r GROUP BY membre_id
    Ca doit marcher comme ça !

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Par défaut
    Il suffit d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT membre_id, SUM(nb_relations) AS nb FROM (
     SELECT a_membre_id AS membre_id, COUNT(*) AS nb_relations
     FROM relation
     GROUP BY a_membre_id
     UNION ALL
     SELECT b_membre_id AS membre_id, COUNT(*) AS nb_relations
     FROM relation
     GROUP BY b_membre_id
    ) AS tmp
    GROUP BY membre_id
    Rachid A.

  8. #8
    Membre chevronné Avatar de Phiss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2005
    Messages
    676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2005
    Messages : 676
    Par défaut
    Merci à tous les deux,
    Vos deux réponses fonctionne.
    Je vous remercie.

    J'ai encore beaucoup de choses à apprendre dans les requêtes.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/04/2013, 14h59
  2. [Toutes versions] Calcul des 10 derniers numéros d'une colonne avec décal des nombres 1 fois sur 2
    Par MP5078 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 10/07/2012, 12h04
  3. Réponses: 6
    Dernier message: 04/11/2008, 22h35
  4. Réponses: 4
    Dernier message: 06/12/2007, 16h46
  5. [C#] Compter le nombre de TEXTBOX sur une page ASPX
    Par alain_27 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 27/05/2005, 14h19

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