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

PHP & Base de données Discussion :

Fonction SUM() + COUNT() avec un while. [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Par défaut Fonction SUM() + COUNT() avec un while.
    Bonjour à tous,
    j'ai un probleme pour faire un script utilisant SUM(), COUNT() et mysql_fetch_array()

    le but du script :
    Afficher les users (membres) et indiqué leurs nombre de parties (donc leurs d'apparition dans la colonne membres)
    Afficher en face d'eux leurs points (addition de leurs points respectifs)
    Et qu'ils soient classé par leurs nombres de points


    voila où j'en suis .. je n'arrive pas à grand chose ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $requete = "SELECT membres, COUNT(membres) As `somme`, SUM(points) As `somme2` FROM play GROUP BY membres ORDER BY points DESC" ;
     
    $res = mysql_query($requete) or die(mysql_error());
     
    while ($res & $data = mysql_fetch_array($res))
     
    {
      echo $data['membres'];
      echo ' à joué ';
      echo $res['somme'].' fois';
      echo ' et à gagné  ';
      echo $res['somme2'].' points<br /> ';
     
    }
    Merci de votre aide !

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 215
    Par défaut
    Bonsoir gotan,
    Je suis débutant en php et donc mon code n'est peut-être pas optimisé au mieux qu'il pourrait l'être! Mais je te le donne quand même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
    // Connexion à la base de donnée
    include 'config.php';
     
    // On va chercher tout les membres
    $sql_membre = mysql_query("SELECT DISTINCT `membres` FROM `play` ORDER BY `points` DESC") ;
     
    // Si il y a au moins un resultat on continue...
    if (mysql_num_rows($sql_membre) != 0)
    {
    	while ($play = mysql_fetch_array($sql_membre))
    	{
    		//On affiche le nom du membre
    		$nom = $play['membres'];
    		echo 'Le membre '.$nom;
     
    		// On affiche son nombre de parties
    		$sql_count = mysql_query("SELECT count(points) as `nombre_parties` FROM `play` WHERE `membres` = '".$nom."'");
    		$play = mysql_fetch_array($sql_count);
    		echo ' a joué '.$play['nombre_parties'].' fois';
     
    		// On affiche son total de points
    		$sql_sum = mysql_query("SELECT SUM(points) as `total_points` FROM `play` WHERE `membres` = '".$nom."'");
    		$play = mysql_fetch_array($sql_sum);
    		echo ' et dispose de '.$play['total_points'].' points<br>';
    	}
    }
    // Sinon on affiche qu'il n'y a pas de résultat
    else
    {
    	echo 'Aucun résultat';
    }
     
    //On ferme tout ca...
    mysql_close();
    ?>
    Dit moi si c'est ok
    Et si t'as des questions hésites pas. Par contre je laisse les pros du développement en php corriger les erreurs de mon code si il y en a .

    Bonne soirée!

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Par défaut
    Bonjour NiKi59, merci pour ton aide et ta réponse.

    Donc, ton code m'affiche cette erreur :

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ... on line 9
    Aucun résultat


    la ligne 9 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (mysql_num_rows($sql_membre) != 0)
    donc j'enleve le if et else (de toute façon un membre est obligé d'avoir fait au moins une partie donc la condition sera toujours vraie)

    et là le code m'affiche :

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ... on line 9

    la ligne 9 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($play = mysql_fetch_array($sql_membre))

    Voilà, je ne sais pas si le probleme viens de moi ..
    Merci de ton aide.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bonjour

    Tout d'abord : Explications et correction de l'erreur "supplied argument is not a valid MySQL result resource"

    Ensuite, j'aimerais savoir ce qui cloche dans ton script de départ : une erreur d'exécution ? un résultat incohérent ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 215
    Par défaut
    Bonjour,

    Il doit y avoir un probleme avec la base de donnée.
    C'est bien une table 'play' qui contient le champ 'membres' et 'points' ?

    J'ai modifié le code de sorte à ce que l'on est plus de précision sur l'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
    // Connexion à la base de donnée
    include 'config.php';
     
    // On va chercher tout les membres
    $sql_membre = mysql_query("SELECT DISTINCT `membres` FROM `play` ORDER BY `points` DESC") or die("Erreur lors de l'exécution de la requête.<br />\nMySQL a retourné :<br />\n". mysql_error()) ; 
     
    // Si il y a au moins un resultat on continue...
    if (mysql_num_rows($sql_membre) != 0) 
    {
    	while ($play = mysql_fetch_array($sql_membre))
    	{
    		//On affiche le nom du membre
    		$nom = $play['membres'];
    		echo 'Le membre '.$nom;
     
    		// On affiche son nombre de parties
    		$sql_count = mysql_query("SELECT count(points) as `nombre_parties` FROM `play` WHERE `membres` = '".$nom."'")or die("Erreur lors de l'exécution de la requête.<br />\nMySQL a retourné :<br />\n". mysql_error()) ; 
    		$play = mysql_fetch_array($sql_count);
    		echo ' a joué '.$play['nombre_parties'].' fois';
     
    		// On affiche son total de points
    		$sql_sum = mysql_query("SELECT SUM(points) as `total_points` FROM `play` WHERE `membres` = '".$nom."'")or die("Erreur lors de l'exécution de la requête.<br />\nMySQL a retourné :<br />\n". mysql_error()) ; 
    		$play = mysql_fetch_array($sql_sum);
    		echo ' et dispose de '.$play['total_points'].' points<br>';
    	}
    }
    // Sinon on affiche qu'il n'y a pas de résultat
    else
    {
    	echo 'Aucun résultat';
    }
     
    //On ferme tout ca...
    mysql_close();
    ?>

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Par défaut
    En effet je ne choisissai pas la bonne bdd

    Il n'y à plus d'erreurs, mais vis à vis du script deux problemes subsistent :

    1) Les membres sont classés par nombres de parties (pas par points), pourtant c'est bien marqué ORDER BY `points`

    2) Il y à plusieurs jeux, et quand je met dans la requete WHERE = 2 (ou autre) et bien il me comptabilise la totalité des points tous les jeux pour le membre, et pas seulement du jeu 2.


    J'aimerai savoir comment régler ces problemes, merci à toi.

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 215
    Par défaut
    1) Les membres sont classés par nombres de parties (pas par points), pourtant c'est bien marqué ORDER BY `points`
    Euh c'est étrange car chez moi sa fonctionne. (tu n'as pas oublié DESC en fin de reqûete ? : ORDER BY points DESC)
    2) Il y à plusieurs jeux, et quand je met dans la requete WHERE = 2 (ou autre) et bien il me comptabilise la totalité des points tous les jeux pour le membre, et pas seulement du jeu 2.
    Les jeux sont dans un autre table ?
    Tu marques WHERE = 2 mais tu ne précise pas quel champs auquel tu veux appliquer la condition ' = 2 'dans la requête.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Par défaut
    non je n'ai pas oublié DESC, c'est assez bizarre en effet.

    Oui il y à une table avec plusieurs jeux differents.
    Je voulait marqué "WHERE id_jeux = 2" (la table ce nomme "jeux", avec deux colonne : id et nom)

    donc dans la requette si je met WHERE id_jeux = 2, seulement les membres qui ont joué au jeu 2 vont aparaitre (c'est ce que je veux) mais pas seulement les points qu'ils ont eu dans jeu 2, mais tous leurs points de tous les jeux vont aparaitre (ce que je ne veux pas).

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 215
    Par défaut
    Bonsoir,

    J'ai trouvé pourquoi cela ne s'afficher pas très bien dans l'ordre, en fait la requête triait par 'points' et non par 'somme de points en fonction du membre'.
    J'ai donc modifier la requête en conséquence et tout est ok.

    Sinon pour l'id du jeu il suffit juste de mettre WHERE id_jeu = 'le_numero_que_tu_veux' dans chacune des requête et le tour est joué.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?php
    // Connexion à la base de donnée
    include 'config.php';
     
    // On definie (ici manuellement...) l'id du jeu :
    $id_jeu = 1;
     
    // On va chercher tout les membres
    $sql_membre = mysql_query("SELECT DISTINCT `membres`, sum(`points`) as `sum_points` FROM `play` WHERE `id_jeu` = '".$id_jeu."' GROUP BY `membres` ORDER BY `sum_points` DESC") or die("Erreur lors de l'exécution de la requête.<br />\nMySQL a retourné :<br />\n". mysql_error()) ; 
     
    // Si il y a au moins un resultat on continue...
    if (mysql_num_rows($sql_membre) != 0) 
    {
    	while ($play = mysql_fetch_array($sql_membre))
    	{
    		//On affiche le nom du membre
    		$nom = $play['membres'];
    		echo 'Le membre '.$nom;
     
    		// On affiche son nombre de parties
    		$sql_count = mysql_query("SELECT count(points) as `nombre_parties` FROM `play` WHERE `membres` = '".$nom."' AND `id_jeu` = '".$id_jeu."' ")or die("Erreur lors de l'exécution de la requête.<br />\nMySQL a retourné :<br />\n". mysql_error()) ; 
    		$play = mysql_fetch_array($sql_count);
    		echo ' a joué '.$play['nombre_parties'].' fois';
     
    		// On affiche son total de points
    		$sql_sum = mysql_query("SELECT SUM(points) as `total_points` FROM `play` WHERE `membres` = '".$nom."' AND `id_jeu` = '".$id_jeu."'" )or die("Erreur lors de l'exécution de la requête.<br />\nMySQL a retourné :<br />\n". mysql_error()) ; 
    		$play = mysql_fetch_array($sql_sum);
    		echo ' et dispose de '.$play['total_points'].' points<br>';
    	}
    }
    // Sinon on affiche qu'il n'y a pas de résultat
    else
    {
    	echo 'Aucun résultat';
    }
     
    //On ferme tout ca...
    mysql_close();
    ?>
    Voila encore une fois je te le répète je ne suis qu'un débutant et j'essaye d'aider comme je peux, si tu as des questions sur le comment du pourquoi n'hésites pas!

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5
    Par défaut
    Et bien écoute NiKi59 ça marche parfaitement.

    Un grand merci à toi pour cette aide sous plusieurs jours
    Cesse de dire que tu es un débutant

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 215
    Par défaut
    De rien ce fût un plaisir de t'avoir aider!

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

Discussions similaires

  1. [Excel] Probleme avec la fonction SUM
    Par lidouka dans le forum Excel
    Réponses: 2
    Dernier message: 06/03/2007, 13h09
  2. Requête avec fonction Sum
    Par freud dans le forum Bases de données
    Réponses: 3
    Dernier message: 12/02/2007, 13h32
  3. probleme avec la fonction sum (debutant)
    Par mcf1 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/05/2006, 09h38
  4. probleme avec la fonction sum (debutant)
    Par mcf1 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/05/2006, 09h33
  5. pb avec la fonction sum!
    Par ber_jp dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 28/08/2004, 22h22

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