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 :

Addition dans une requête


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2004
    Messages : 42
    Points : 20
    Points
    20
    Par défaut Addition dans une requête
    Bonjour,
    je souhaite faire l'addition de deux requêtes qui permettent de compter le nombre de joueurs différents, les deux requêtes sont réalisées sur la même table mais avec des conditions différentes. La première requête compte le nombre de joueurs inscrits sur mon site et la deuxième requête compte les joueurs non inscrits. Je voudrais avoir le total des joueurs inscrits et non inscrits par jeu. L'id_joueur 1 correspond aux joueurs non inscrits.

    Les tables :
    bdd_plateaux_joueurs : id_stat_joueur id_stat id_joueur nom_anonyme
    bdd_plateaux_stat : id_stat id_plateau
    bdd_plateaux : id_plateau, nom_plateau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $req = mysql_query ("SELECT COUNT(DISTINCT a.id_joueur) AS total, a.id_joueur, a.id_stat, b.id_plateau, b.id_stat, c.id_plateau, c.nom_plateau FROM bdd_plateaux_joueurs a, bdd_plateaux_stat b, bdd_plateaux c WHERE a.id_stat=b.id_stat AND b.id_plateau=c.id_plateau AND a.id_joueur!=1 GROUP BY b.id_plateau ORDER BY total DESC");
     
    $req = mysql_query ("SELECT COUNT(DISTINCT a.nom_anonyme) AS total, a.nom_anonyme, a.id_stat, b.id_plateau, b.id_stat, c.id_plateau, c.nom_plateau FROM bdd_plateaux_joueurs a, bdd_plateaux_stat b, bdd_plateaux c WHERE a.id_stat=b.id_stat AND b.id_plateau=c.id_plateau AND a.nom_anonyme IS NOT NULL GROUP BY b.id_plateau ORDER BY total DESC");

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 142
    Points : 38 926
    Points
    38 926
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Je ne sais pas si cette question est encore d'actualité, si c'est le cas, voici quelques remarques :

    • une requête mise en forme est plus facile à lire et donc à maintenir
    • les jointures s'écrivent avec l'opérateur JOIN, là encore, la lisibilité en sera améliorée
    • la clause GROUP BY devrait être cohérente avec la liste des colonnes de la clause SELECT, je suppose que vous utilisez MYSQL, c'est le seul SGBD qui accepte cette entorse à la norme
      dans votre cas, il n'est pas nécessaire d'utiliser un groupage
    • la clause distinct est ici inutile,
    • enfin, s'il s'agit de compter le nombre de joueurs abonnés et non abonnés, les autres colonnes n'ont pas de sens, du coup les jointures sont inutiles


    Voici donc une solution

    Création du jeu d'essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    with Joueurs (JO_id, JO_abonne) as 
        (select 100, 1   
         union all 
         select 200, 0   
         union all
         select 300, 1   
         union all
         select 400, 1   
         union all
         select 500, 0   
        )
    La requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select count(JO_id) as nb_joueurs
         , sum(case when jo_abonne=1 then 1 else 0 end) as nb_abonne
         , sum(case when jo_abonne=0 then 1 else 0 end) as nb_non_abonne
    from joueurs
    Et le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nb_joueurs   nb_abonne    nb_non_abonne
    ----------------------------------------------------------------------
    5            3            2

Discussions similaires

  1. [AC-2010] addition dans une requête
    Par hboisteau dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/08/2012, 20h56
  2. Opérateur d'addition dans une requête JPQL
    Par flamant dans le forum JPA
    Réponses: 1
    Dernier message: 18/05/2012, 15h09
  3. addition dans une requête
    Par meuah dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/05/2008, 19h06
  4. addition dans une requête
    Par meuah dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/05/2008, 08h29
  5. Addition progressive d'un champ dans une requête.
    Par pcvesoul dans le forum Access
    Réponses: 5
    Dernier message: 04/02/2006, 23h23

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