[MYSQL/PHP] Comment réduire ce code

antic80 Messages postés 4877 Statut Contributeur -  
antic80 Messages postés 4877 Statut Contributeur -
bonjour a tous

voila j'ai une table eleve avec les colonnes suivantes

Note1,Note2,Note3,.....Note8

je cherche a connaitre le nombre de fois que la note1 est inferieur a 5, puis pareil pour les autres notes

j'ai mis ca comme code
$rqNote1="SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and Note1 <= '5' ";
$rqNote2="SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and Note2 <= '5' ";
$rqNote3="SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and Note3 <= '5' ";
$rqNote4="SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and Note4 <= '5' ";
$rqNote5="SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and Note5 <= '5' ";
$rqNote6="SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and Note6 <= '5' ";
$rqNote7="SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and Note7 <= '5' ";
$rqNote8="SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and Note8 <= '5' ";


$Liste représente la classe en question

ensuite j'ai le traitement de la requete

$req = mysql_query($rqNote1) or die('Erreur SQL !<br>'.$rqNote1.'<br>'.mysql_error());

$test=mysql_fetch_row($req);

$resultat=$test[0];

parti comme je suis c 3 lignes vont aussi etre repeter 8 fois

comment je peux simplifier tout ce code

9 réponses

  1. maily Messages postés 7560 Statut Contributeur 453
     
    Bonjour!

    il me semble que ça marcherait

    SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and (Note1 <= '5' or Note2 <= '5' or Note3 <= '5' or Note4 <= '5' or Note5 <= '5' or Note6 <= '5' or Note7 <= '5' or Note8 <= '5' )
    

    Mais c'est à tester!
    0
  2. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Salut,

    Avec uen boucle et un tableau de resultats:
    for($i=1; $i<9;$i++)
    {
        $rq="SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and Note$i <= '5' ";
        $res=mysql_query($rq);
        $result[$i]=mysql_result($rq,0);
    }


    De $result[1] à $result[8] tu as tes resultats.
    En fait le soucis avec ta requête maily, c'est que le count rassemblera le nombre de resultats inférieurs à 5 pour toutes les notes confondues.
    J'ai pensé à un group by mais je ne crois aps que ça soit faisable ici.
    0
  3. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    mais comment afficher le resultat en séparer car j'aimerai obtenir

    Note inférieur a 5

    Note 1 : ...
    Note 2 : ...

    etc...

    .... etant le nombre pour chaque note
    0
    1. maily Messages postés 7560 Statut Contributeur 453
       
      La réponse de Kilian répond à ta question.

      A chaque passage dans la boucle, tu affiches le résultat de la requête!
      0
  4. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    bon alors j'ai essayer de remettre par rapport a ce que j'ai le bout de code de killian

    for($i=1; $i<9;$i++)
    {
        $rq="SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and Note$i <= '5' ";
        $res=mysql_query($rq)or die('Erreur SQL !<br>'.$rq.'<br>'.mysql_error());
        $result[$i]=mysql_fetch_row($res);
    	echo $result[$i];
    }
    


    mais j'obtient comme resultat

    ArrayArrayArrayArray....

    pourquoi
    0
    1. matt22 Messages postés 3 Statut Membre
       
      moi je modifierais un peu :

      for($i=1; $i<9;$i++)
      {
      $Note="Note".$i;

      $rq="SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and $Note <= '5' ";
      $res=mysql_query($rq)or die('Erreur SQL !<br>'.$rq.'<br>'.mysql_error());
      while ($note = mysql_fetch_array($req))
      echo "note=".$note->[$Note];

      }

      Mais bon pareil c à tester...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Oui parce que tu utilises mysql_fetch_row qui renvoie un tableau et non pas le résultat directement, c'est pour ça que j'ai pris mysql_result.

    Pas de soucis, change juste deux lignes pour chercher ta valeur dans le tableau:
    for($i=1; $i<9;$i++)
    {
        $rq="SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and Note$i <= '5' ";
        $res=mysql_query($rq)or die('Erreur SQL !<br>'.$rq.'<br>'.mysql_error());
        $result=mysql_fetch_row($res);
        echo $result[0];
    }
    0
  7. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    en fait j'avais mis mysql_fetch_row car avec mysql_result j'avais un message d'erreur

    Warning: Wrong parameter count for mysql_result() in /home/lyceebai/www/Spip/Satisfaction/StatApprenant.php on line 62

    que ve dire cette erreur ??

    sinon maintenant ca marche nickel
    0
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      que ve dire cette erreur ??

      Je m'étais gourré, c'était
      mysql_result($res,0);

      et non pas
      mysql_result($rq,0);
      0
  8. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    j'aimerai aussi adapter ce code a a un autre morceau de code

    echo "Accueil : ".$data3[1];
    echo "<br />";
    echo "Information et communication interne : ".$data3[2];
    echo "<br />";
    echo "Equipements pédagogiques : ".$data3[3];
    echo "<br />";
    echo "Locaux : ".$data3[4];
    echo "<br />";
    echo "Qualité de formation : ".$data3[5];
    echo "<br />";
    echo "Hébergement et Restauration : ".$data3[6];
    echo "<br />";
    echo "Aide à l'insertion Professionnelle : ".$data3[7];
    echo "<br />";
    echo "Prestations offertes par l'établissements (foyer, sorties pédagogiques, voyages, visites, etc.) : ".$data3[8];
    echo "<br />";
    echo "<br />";
    


    j'aimerai par exemple avoir pour la 1ere Note

    echo "Accueil : ".$data3[1] ." ". ici;

    a la place de ici j'aimerai mettre le nombre de fois que la note 1 est inférieur a 5

    et pareil pour les autres lignes
    0
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      En ce cas, tu stockes les infos dans un tableau au lieu de les afficher directement:
      for($i=1; $i<9;$i++)
      {
          $rq="SELECT COUNT(*) FROM apprenant WHERE Classe='$Liste' and Note$i <= '5' ";
          $res=mysql_query($rq)or die('Erreur SQL !<br>'.$rq.'<br>'.mysql_error());
          $data3[$i]=mysql_result($res,0);
          
      }

      Puis à la suite tu mets ton code.
      0
  9. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    ok je verrais ca demain

    mais ce morceau de code me renvoie une erreur celle que j'ai cité plus haut

    $data3[$i]=mysql_result($res,0);
    0
    1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
       
      Ah? Bizzare. Ben sinon, tu peux passer par mysql_fetch_row.
      0
  10. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    je te tiens au courant demain

    merci pour ton aide
    0