compter des résultats dans une table [ résolu ]

compter des résultats dans une table [ résolu ] - PHP - Programmation

Marsh Posté le 30-12-2002 à 23:07:07    

salut à tous,
Cela fait quelques heures que je me casse la tête pour pouvoir compter le nombre de chaps dans ma table.
Je vais essayer d'être clair:
Je fait un classement de pilote de rallye, je récupère de la part de chaque membre son nom, sa fonction, ainsi que son classement pour chaque rallyes.
J'ai donc crée une table comportant 3 champs:"nom_pilote","fonction","resultat"
 
ensuite j'ai écrit ce bout de code pour afficher les résultats:
 
$query_pilote="select * from $table WHERE fonction='pilote' GROUP BY nom_pilote";
$result_pilote=mysql_query($query_pilote);
 
while ($classement_pilote = mysql_fetch_row($result_pilote))
{
 
// compte le nombre de courses pour chaque pilote
 
$nb_course_pilote = mysql_query("select count (*) FROM 'classementSAP' where nom_pilote like '$tableauclassement[0]'" );
 
// affichage du classement général après calcul
 
echo "$nb_course
<font face='Arial' size='5'>
 <center>
  <TABLE CELLPADDING=4 CELLSPACING=0 width='60%'>
   <TR BGCOLOR='#454545'>
         <TD width='3%' >
     <b><FONT COLOR='#5BFF79'>$chiffre_pilote</FONT></b></font>
    </TD>
          <TD width='25%' >
     <b><FONT COLOR='#FFFFFF'>$classement_pilote[0]</FONT></b></font>
    </TD>
    <TD width='25%'>
     <b><FONT COLOR='#FFFFFF'>$classement_pilote[1]</FONT></b></font>
    </TD'>
    <TD width='12%'>
     <b><FONT COLOR='#FFFFFF'>$nb_course_pilote</FONT></b></font>
    </TD>
       </TR>
  </table>
 </center>
</font>
";
}
-----------------------------------------------------
donc ca fonctionne, les pilotes sont affichés avec leur fonction mais pas le nombre de courses qu'ils ont fait.
je me doute bien que le problème est là:
 
$nb_course_pilote = mysql_query("select count (*) FROM 'classementSAP' where nom_pilote like '$tableauclassement[0]'" );
 
mais je n'arrive pas à le regler, un peut d'aide serait la bien venue, merci


Message édité par mecano1 le 02-01-2003 à 00:12:41
Reply

Marsh Posté le 30-12-2002 à 23:07:07   

Reply

Marsh Posté le 31-12-2002 à 00:42:41    

Elle sort d'où la variable $tableauclassement :??:

Reply

Marsh Posté le 31-12-2002 à 00:42:42    

Premièrement, je ne vois pas très bien ce que vient faire le GROUP BY dans :

$query_pilote="select * from $table WHERE fonction='pilote' GROUP BY nom_pilote";


 
J'aurais plutôt vu :

$query_pilote = "SELECT * FROM $table WHERE fonction='pilote' ORDER BY resultat";


 
(puisque résultat correspond au classement).
 
[Edit : SELECT nom_pilote, resultat plutôt]
 
Sinon au niveau de :

$nb_course_pilote = mysql_query("select count (*) FROM 'classementSAP' where nom_pilote like '$tableauclassement[0]'" );


 
Qu'est-ce que $tableauclassement ? Tu ne voulais pas plutôt écrire $result_pilote[0] ?
 
Enfin ici :

<b><FONT COLOR='#5BFF79'>$chiffre_pilote</FONT></b></font>


 
... j'aurais pensé à $result_pilote[2] pour afficher le classement du pilote devant son nom.
 
Dernier truc : puisque tu cherches uniquement les pilotes dans ta table, pourquoi afficher la fonction (qui sera toujours "pilote" dans ton tableau) ?


Message édité par sielfried le 31-12-2002 à 01:50:02

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 31-12-2002 à 00:45:18    

De toute façon, ne serait-ce pas plus simple de ne faire qu'une seule requête :
 
SELECT $table.*, count(*) AS Total
FROM $table, classementSAP
WHERE fonction='pilote'
   AND $table.nom_pilote = classementSAP.nom_pilote
GROUP BY $table.nom_pilote


Message édité par mrbebert le 31-12-2002 à 00:45:34
Reply

Marsh Posté le 31-12-2002 à 01:08:39    

bon en fait effectivement je me suis lourdé c'est pas $tableauclassement, mais $classement_pilote.
 
pour répondre à sielfried, je ne peux pas ecrire:
 

Citation :

$query_pilote = "SELECT * FROM $table WHERE fonction='pilote' ORDER BY resultat";  

 
car au fur et a mesure des entrée je me retrouve par exemple avec 3 fois le pilote nicolas qui a fait 3 rallyes différents, et comme je ne veux qu'il ne soit affiché qu'une seule fois j'ai fait un GROUP BY nom_pilote.
Ensuite j'ai donné une fonction parceque mon script que vous voyez n'est pas complet, il y a aussi des copilotes que je met dans le même style de tableau et il y a pire encore j'ai des pilotes qui deviennent copilote desfois.
Enfin bon mon affichage est bon mais je n'arrive pas à compter le nombre de rallyes pour le pilote nicolas par exemple.
c'est sur que j'ai oublié des trucs pour pas faire un post hyper lourd, mais comme vous me le demandez si gentillement je vous met le script complet pour mieux comprendre:
 

Citation :

<html>
 <HEAD>
                <TITLE>enregistrement des classements</TITLE>
        </HEAD>
<BODY onload="javascript:{if(parent.frames[0]&&parent.frames['navigation'].Go)parent.frames['navigation'].Go()}" BACKGROUND="../gifs/violet1.jpg" TEXT="white">
 
 
<?
echo "<font face='Arial' size='5'>
  <center>Classement SAP par résultat de Classe</center>
  <br>
   <center>
    <TABLE CELLPADDING=4 CELLSPACING=0 width='60%'>
         <TR BGCOLOR='#454545'>
      <TD width='3%'>
       <b><FONT COLOR='yellow'>Cl</FONT></b></font>
      </TD>
            <TD width='25%'>
       <b><FONT COLOR='yellow'>Nom</FONT></b></font>
      </TD>
      <TD width='25%'>
       <b><FONT COLOR='yellow'>Fonction</FONT></b></font>
      </TD>
      <TD width='12%'>
       <b><FONT COLOR='yellow'>Nb de courses</FONT></b></font>
      </TD>
         </TR>
    </TABLE>
   </center>
  </font>
";
 
include("conf.php" );
$table="classementSAP";
 
// connection à la base
 
MYSQL_CONNECT($serveur,$login,$pass);
mysql_select_db("$base" );
 
// selectionne toutes les entrées de la table classementSAP quand la fonction est pilote
 
$query_pilote="select * from $table WHERE fonction='pilote' GROUP BY nom_pilote";
$result_pilote=mysql_query($query_pilote);
 
// selectionne toutes les entrées de la table classementSAP quand la fonction est 'copilote'
 
$query_copilote="select * from $table WHERE fonction='copilote' GROUP BY nom_pilote";
$result_copilote=mysql_query($query_copilote);
 
/////////////////
// classement pilote //
/////////////////
 
// met la variable chiffre_pilote à 0 pour le classement des pilotes
 
$chiffre_pilote=0;
 
// affiche ligne par ligne les résultats jusqu'à la fin du tableau 'pilote'
 
while ($classement_pilote = mysql_fetch_row($result_pilote))
{
 
// compte le nombre de courses pour chaque pilote
 
$nb_course_pilote = mysql_query("select count (*) FROM 'classementSAP' where nom_pilote like '$classement_pilote[0]'" );
 
// augmente la variable chiffre_pilote de 1 pour le classement pilote
 
$chiffre_pilote=$chiffre_pilote+1;
 
// affichage du classement général après calcul
 
echo "$nb_course
<font face='Arial' size='5'>
 <center>
  <TABLE CELLPADDING=4 CELLSPACING=0 width='60%'>
   <TR BGCOLOR='#454545'>
         <TD width='3%' >
     <b><FONT COLOR='#5BFF79'>$chiffre_pilote</FONT></b></font>
    </TD>
          <TD width='25%' >
     <b><FONT COLOR='#FFFFFF'>$classement_pilote[0]</FONT></b></font>
    </TD>
    <TD width='25%'>
     <b><FONT COLOR='#FFFFFF'>$classement_pilote[1]</FONT></b></font>
    </TD'>
    <TD width='12%'>
     <b><FONT COLOR='#FFFFFF'>$nb_course_pilote</FONT></b></font>
    </TD>
       </TR>
  </table>
 </center>
</font>
";
}
///////////////////
// classement copilote //
///////////////////
 
// met la variable chiffre_copilote à 0 pour le classement des copilotes
 
$chiffre_copilote=0;
 
// affiche ligne par ligne les résultats jusqu'à la fin du tableau 'copilote'
 
while ($classement_copilote = mysql_fetch_row($result_copilote))
{
 
// compte le nombre de courses pour chaque pilote
 
$nb_course_copilote = mysql_query("select count (*) FROM 'classementSAP' where nom_pilote like '$classement_copilote[0]'" );
 
// augmente la variable chiffre_copilote de 1 pour le classement copilote
 
$chiffre_copilote=$chiffre_copilote+1;
 
// affichage du classement général après calcul
echo "$nb_course
<font face='Arial' size='5'>
 <center>
  <TABLE CELLPADDING=4 CELLSPACING=0 width='60%'>
   <TR BGCOLOR='#454545'>
          <TD width='3%' >
     <b><FONT COLOR='red'>$chiffre_copilote</FONT></b></font>
    </TD>
    <TD width='25%' >
     <b><FONT COLOR='#FFFFFF'>$classement_copilote[0]</FONT></b></font>
    </TD>
    <TD width='25%'>
     <b><FONT COLOR='#FFFFFF'>$classement_copilote[1]</FONT></b></font>
    </TD'>
    <TD width='12%'>
     <b><FONT COLOR='#FFFFFF'>$nb_course_copilote</FONT></b></font>
    </TD>
       </TR>
  </table>
 </center>
</font>
";
}
 
MYSQL_CLOSE();  
?>
 
 
</BODY>
</HTML>


Message édité par mecano1 le 31-12-2002 à 01:09:44
Reply

Marsh Posté le 31-12-2002 à 01:53:09    

Ce serait pas mal que tu montres quelques exemples d'enregistrement pour ta table avec ce que t'aimerais obtenir, car y'a pas mal de trucs que je parviens pas à comprendre, là, comme ça (par rapport à ce que tu veux faire).


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 01-01-2003 à 17:56:45    

oui je sais c'est pas évident de comprendre ce que je veux obtenir.
Voici les champs de ma table dans l'ordre:
-nom_pilote (je met le nom du pilote ou du copilote en TEXT)
-fonction (2 choix: pilote ou copilote en TEXT)
-type_course (4 choix: rallye,course de cote,slalom et circuit en TEXT)
-nom_course (nom de la course TEXT)
-result_classe (classement à cette course par cylindrée de voiture TINYINT)
-result_groupe (classement à cette course par categorie de voiture TINYINT)
-result_scratch (classement à cette course par résultat général TINYINT).
 
Là en fait ce que je cherche à faire c'est pouvoir ressortir le nombre de courses qu'à éffectué chaque pilotes afin de faire un calcul de moyenne et d'afficher le classement.
Va voir sur ce lien pour voir à quoi ca ressemble pour le moment et ce qu'il me manque, c'est une table d'essai tu peux y entrer un nouvel enregistrement.
http://vassistance2.free.fr/classe [...] sement.php


Message édité par mecano1 le 01-01-2003 à 17:59:00
Reply

Marsh Posté le 01-01-2003 à 19:24:30    

En fait dès le début j'ai pas capté une erreur qui est sûrement à l'origine de ton pb :
 

$nb_course_pilote = mysql_query("select count (*) FROM 'classementSAP' where nom_pilote like '$tableauclassement[0]'" );


 
A la place essaie :
 


$res = mysql_query("select count (*) FROM 'classementSAP' where nom_pilote like '$tableauclassement[0]'" );
$nb_course_pilote = mysql_fetch_row($res);


 
Et à l'affichage tu n'indiques pas $nb_course_pilote mais $nb_course_pilote[0].
 
Dis-moi ce que ça donne.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 01-01-2003 à 20:21:42    

J'ai remplacé dans ton bout de code $tableauclassement par $classement_pilote vu que j'ai fait des modifs depuis la 1ere fois et alors là je me tappe un:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /opt/lampp/htdocs/xampp/classement_sap/affiche_classement.php on line 66
 
et la ligne 66 c'est justement ce que je viens de rajouter

Reply

Marsh Posté le 01-01-2003 à 20:29:56    

Oui désolé je voulais dire :
 

$res = mysql_query("select count (*) FROM 'classementSAP' where nom_pilote like '$classement_pilote[0]'" );


 
Ca devrait marcher... Sinon vire les ' autour du nom de la table, je pense pas que ce soit autorisé (` l'est).


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 01-01-2003 à 20:29:56   

Reply

Marsh Posté le 01-01-2003 à 20:39:48    

non sielfried toujours pas, c'est exactement le même chose, pourtant j'ai tappé ca:
 
$res = mysql_query("select count (*) FROM $table where nom_pilote like '$classement_pilote[0]'" );
$nb_course_pilote = mysql_fetch_row($res);
 
j'ai exactement le même message d'erreur.

Reply

Marsh Posté le 01-01-2003 à 20:55:57    

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource  
 
ca veut dire que le résultat passé à la fonction mysql_fetch_row() (qui est le résultat de la fonction mysql_query()) ne correspond pas à un descripteur valide. C'est à dire que la requête de mysql_query n'est pas correcte.
 
Essaie plutot :
$res = mysql_query("select count (*) FROM $table where nom_pilote like '" . addslashes($classement_pilote[0]) . "'" );

Reply

Marsh Posté le 01-01-2003 à 21:06:04    

là j'ai toujours la même erreur, mais à mon avis ca viens du fait qu'on ne peux pas faire un "mysql_fetch_row" si la variable "$classement_pilote[0]" ne contient qu'un seul enregistrement


Message édité par mecano1 le 01-01-2003 à 21:18:57
Reply

Marsh Posté le 01-01-2003 à 22:11:43    

c'est bon ca fonctionne je m'en suis sorti comme ca:
 
$res = mysql_query("select count(result_classe) FROM $table WHERE nom_pilote like '$classement_pilote[0]' and fonction='pilote'" );
$nb_course_pilote = mysql_fetch_row($res);  
 
et j'ai affiché $nb_course_pilote[0]
 
merci pour l'aide que vous m'avez apporté :bounce:
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed