[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
    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!
    1. 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
        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!
      2. 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...
      3. 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
          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);
        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
          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.
        4. Contributeur
          je te tiens au courant demain

          merci pour ton aide