[MYSQL/PHP] Comment réduire ce code

Fermé
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 - 11 avril 2006 à 16:23
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 - 11 avril 2006 à 21:18
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
A voir également:

9 réponses

maily Messages postés 7556 Date d'inscription lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
11 avril 2006 à 16:30
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
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
11 avril 2006 à 16:34
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
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
11 avril 2006 à 16:35
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
maily Messages postés 7556 Date d'inscription lundi 26 juin 2000 Statut Contributeur Dernière intervention 23 juin 2023 453
11 avril 2006 à 16:37
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
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
11 avril 2006 à 16:42
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
matt22 Messages postés 3 Date d'inscription dimanche 27 janvier 2002 Statut Membre Dernière intervention 11 avril 2006
11 avril 2006 à 16:51
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
11 avril 2006 à 16:45
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
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
11 avril 2006 à 16:48
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
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
11 avril 2006 à 16:55
que ve dire cette erreur ??

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

et non pas
mysql_result($rq,0);
0
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
11 avril 2006 à 16:57
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
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
11 avril 2006 à 16:59
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
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
11 avril 2006 à 17:32
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
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
11 avril 2006 à 20:18
Ah? Bizzare. Ben sinon, tu peux passer par mysql_fetch_row.
0
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
11 avril 2006 à 21:18
je te tiens au courant demain

merci pour ton aide
0