Version complète: sur le forum Webmaster Hub : Classement dans l'ordre et somme
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Didier M
Bonjour,

Voilà, j'ai un problème, je n'arrive pas à aditionner le résultats d'un tableau !!!!
Ne voulant aditionner que les 3 meilleurs valeurs de points.

Ci- dessous mon code :

CODE
$req = mysql_query("SELECT points_Sel1,points_Sel2,points_Sel3,points_Sel4,points_Sel5,points_Sel6,points_S
l7,points_Sel8 from 2005 where Dossards = '121'") or die ('Erreur SQL 3!'.$req.'<br>'.mysql_error());      
       $res1= mysql_numrows($req);
 for ($k=0;$k<$res1;$k++){
       $points1=mysql_result($req,$k,"points_Sel1");
 $points2=mysql_result($req,$k,"points_Sel2");
 $points3=mysql_result($req,$k,"points_Sel3");
 $points4=mysql_result($req,$k,"points_Sel4");
 $points5=mysql_result($req,$k,"points_Sel5");
 $points6=mysql_result($req,$k,"points_Sel6");
 $points7=mysql_result($req,$k,"points_Sel7");
 $points8=mysql_result($req,$k,"points_Sel8");  
 }

$points = array("$points1", "$points2", "$points3", "$points4","$points5","$points6","$points7","$points8");  
 rsort ($points);  
 reset ($points);  
 while (list ($key, $val) = each ($points))
 {    echo "points[".$key."] = ".$val."<br>\n";
 
 }
$a=each($points);
$s1=$a[1];
$s2=$a[3];
$s3=$a[5];
$somme = array($s1,$s2,$s3);
echo "sum(a) = " . array_sum($somme) . "<br>\n";



Merci.
Compte supprimé
1/ Tu selectionne dans ta base par valeurs DESC
2/ Quand tu rempli ton tableau, tu n'ajoute que les 3 premiers champs.
MarvinLeRouge
Salut,

Tu veux quoi précisément ? Les 3 meilleures sommes de points_sel1 à points_sel8 ? Autre chose ?
Donne un exemple concret, histoire qu'on soit sûr de bien se comprendre.
Boo2M0rs0
Bonjour,

il me parait très bizarre ton code :s
CODE
$req = mysql_query("SELECT points_Sel1,points_Sel2,points_Sel3,points_Sel4,points_Sel5,points_Sel6,points_S
el7,points_Sel8 from 2005 where Dossards = '121'") or die ('Erreur SQL 3!'.$req.'<br>'.mysql_error());      
      $res1= mysql_numrows($req);
for ($k=0;$k<$res1;$k++){
      $points1=mysql_result($req,$k,"points_Sel1");
$points2=mysql_result($req,$k,"points_Sel2");
$points3=mysql_result($req,$k,"points_Sel3");
$points4=mysql_result($req,$k,"points_Sel4");
$points5=mysql_result($req,$k,"points_Sel5");
$points6=mysql_result($req,$k,"points_Sel6");
$points7=mysql_result($req,$k,"points_Sel7");
$points8=mysql_result($req,$k,"points_Sel8");  
}


La boucle for parcours toutes les lignes du résultat de la requête et attribue les valeurs à chaque variables, seulement à chaque fois, la variable précédente est écrasée sans que tu t'en ais servi. Si tu as du code à executer pour chaque résultat, tu devrai le placer juste apres:$points8=mysql_result($req,$k,"points_Sel8");.

Mais en voyant la clause Where Dossards = '121' j'ai l'impression que ta requête sql ne doit renvoyer qu'un seul résultat donc le for est inutile :s

Personellement j'aurais fait comme ça:
CODE
<?php

$req    =    "SELECT points_Sel1,points_Sel2,points_Sel3,points_Sel4,points_Sel5,points_Sel6,points_S
l7,points_Sel8 from 2005 where Dossards = '121'";
$sql = mysql_query($req) or die ('Erreur SQL 3!'.$req.'<br>'.mysql_error());

$row = mysql_fetch_row($sql);
if( $row == false)
    die('Aucun enregistrement trouvé');
else
{
    $max1    =    max($row);    //prend la meilleur valeur du tableau
    unset($row[array_search($max1, $row)]);    //l'efface du tableau
    
    $max2    =    max($row);    //prend la meilleur valeur du tableau exepté celle effacée juste avant
    unset($row[array_search($max2, $row)]);
    
    $max3    =    max($row);
    unset($row[array_search($max3, $row)]);
    
    //Les trois meilleurs valeurs:
    $meilleurs    =    $max1 + $max2 + $max3;
}

?>
kjbstar
Yep le code de Boo2M0rs0 devrait fonctionner comme ca wink.gif
Didier M
Bonjour,

Le code de Boo2M0rs0 me parait super, je l'essaie tout de suite et encore merci.

Didier. wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.