[MYSQL/PHP] Comment réduire ce code

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. Contributeur
    je te tiens au courant demain

    merci pour ton aide
    1. Contributeur
      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);
      1. Modérateur
        Ah? Bizzare. Ben sinon, tu peux passer par mysql_fetch_row.
    2. Contributeur
      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
      1. Modérateur
        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.
    3. Contributeur
      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
      1. Modérateur
        que ve dire cette erreur ??

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

        et non pas
        mysql_result($rq,0);
    4. Modérateur
      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];
      }
      1. Contributeur
        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
        1. 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...
      2. Contributeur
        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
        1. Contributeur
          La réponse de Kilian répond à ta question.

          A chaque passage dans la boucle, tu affiches le résultat de la requête!
      3. Modérateur
        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.
        1. Contributeur
          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!