Résultats SUM et GROUP BY incorrect

Résolu
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir à tous !

Besoin d'aide en PHP, la fonction SUM et GROUP BY ne me donne pas un bon résultat pouvez-vous m'aider svp ?

$ref_je = $pdo->query("SELECT SUM(Winner) AS Winn, SUM(Participation) AS Part, Reponse FROM ma_table WHERE Pseudo='".$Pseudo."' GROUP BY Reponse");
while($data_je = $ref_je->fetch(PDO::FETCH_ASSOC)){
$Jeu_W = number_format($data_je["Winn"], 0, ',', ' ');
$Jeu_P = number_format($data_je["Part"], 0, ',', ' ');
}

Dans ma table, j'ai 2 enregistrements identiques :

Pseudo   | Winner | Participation | Reponse    |
------------------------------------------------
Olivier | | 1 | Left |
Olivier | | 1 | Left |
Olivier | | 1 | Right |
Manguier | | 1 | Right |

Le résultat est :
Olivier : 3
Manguier : 1

Alors que je souhaite avoir :
Olivier : 2
Manguier : 1

Pouvez-vous m'aider svp ?

3 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    Je suggère:
    SELECT count (distinct Reponse) as Part FROM ma_table WHERE Pseudo='".$Pseudo."' 

    Si tu veux vérifier que cela te donne le résultat attendu, tu peux tester ceci en direct sur ta base:
    SELECT Pseudo, count (distinct Reponse) as Part FROM ma_table GROUP BY Pseudo
    1
    1. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Punaiiiiiise ! COUNT !!!!
      Merci beaucoup yg_be, j'étais tellement épuisé que je ne faisais que des conneries...
      0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonsoir, si tu veux être aidé, je te suggère:
    1) d'expliquer ce que tu cherches à obtenir, pourquoi tu souhaites 2 pour olivier.
    2) de nous montrer l'ensemble de ton code, pas juste un petit bout insignifiant.
    0
    1. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      1) Je dois cumuler le nombre de fois qu'un membre a participé en tenant compte des réponses "uniques".
      Si Olivier (comme dans le tableau à participé 3 fois avec la même réponse, c'est compté 1, voilà pourquoi SUM() GROUP BY Reponse.

      2) Voici tout mon code :
      $Total= NULL;
      $Stats = $pdo->query("SELECT SUM(Points) AS Total FROM ".$TB_USER_POINTS." WHERE Pseudo = '".$Pseudo."'");
      while($datas = $Stats->fetch(PDO::FETCH_ASSOC)){
      $Total = number_format($datas["Total"], 0, ',', ' ');
      }
      
      if($Total == NULL) {echo "0";} else {echo $Total;}
      
      0
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    quelques réflexions:
    1° le code que tu montres en #2 n'a rien à voir avec celui que tu comptes dans ta question: que se passe-t-il?
    2° le code que tu montres en #2 ne va pas afficher le résultat que tu montres dans ta question: essaies-tu de nous embrouiller?
    3° contrairement à ce que tu écris en #2, Olivier n'a pas participé trois fois avec la même réponse: as-tu bien regardé ton exemple?
    je te suggère de commencer par des exercices plus simples en SQL, et de faire du PHP ensuite.
    0
    1. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Veuille me pardonner, je me suis trompé de code:
      $ref_je = $pdo->query("SELECT SUM(Winner) AS Winn, SUM(Participation) AS Part, Reponse FROM ma_table WHERE Pseudo='".$Pseudo."' GROUP BY Reponse");
      while($data_je = $ref_je->fetch(PDO::FETCH_ASSOC)){
      $Jeu_P = number_format($data_je["Part"], 0, ',', ' ');
      }
      
      if($Jeu_P== NULL) {echo "0";} else {echo $Jeu_P;}
      0