Php MySQL: Sortir des Id par ordre de sore

gemça -  
 Alain42 -
Bonjour,
Je sais plus comment faire, j'espère que l'un de vous pourra m'aider.
J'ai ce code qui compare un variable donnée par la page ($grp) et des variable issue d'une table ($vise).

while($row = mysql_fetch_array($result)){
$score=0;
$vise= unserialize($row["Data"]);
echo "<hr>Comparaison du fichier <b>".$Fichier."</b> avec l'Id".$row["Id"].":<br>\"".$row["Nom"]."\" avec un écart de ".$ecart."%<br>";
if (sizeof($grp)==sizeof($vise)){
for($i=0; $i<sizeof($vise);$i++){
$ecartgrp[$i]=abs(($ecart/100)*$grp[$i]);
if ((($grp[$i]-$ecartgrp[$i]) <= $vise[$i]) && ($vise[$i] <= ($grp[$i]+$ecartgrp[$i]))){
$score++;
}
}
echo "score:".$score."/".($numgrp+1)."valeurs<br>";
}
else{
echo "Le fichier envoyé n'a pas été traité car il n'est pas au bon format ou ne contient pas le même nombre de données";
}
}

Je voudrais faire aficher les Id de la table par ordre de score du plus grand au plus petit.
j'ai essayé de placer les $score dans une variable array et de traiter ensuite avec un arsort($score, $key => $val) mais je n'arrive plus ensuite a traiter l'affichage de Id car je ne suis plus dans la boucle du while..

Si vous pouvez m'indiquer le code et/ou l'astuce qui me manque, ce serait super!
Merci d'avance
A voir également:

7 réponses

Alain42
 
Bonjour,

pour sortir des scores du plus gd au plus petit :

requette : "SELECT * FROM ta_table ORDER BY score DESC"

et dans ta boucle while($row = mysql_fetch_array($result)){

echo "ID: ".$row['id']." Score ".$row['score'];
}
si le nom du champ de la table qui contient les scores est "score
0
gemça
 
Bonjour alain et merci pour cette approche,

malheuresuement ma variable $score n'est pas stockée dans la table, mais elle est générée par le script dans la boucle for() qui elle même est dans le while qui rapatrie le Id de la table.
Je n'arrive donc pas a faire un select de $score.

Tout mon problème est là en fait:
Je rapartie des Id d'une table, j'en extrait la variable $vise que je compare avec une variable $grp.
Cette comparaison donne un $score.
Il me faudrait ensuite faire afficher les Id par score DESC.

Merci pour votre aide.
0
Alain42
 
Rebonjour,

je ne comprend pas trop ton problème

déja une anomalie::
if (sizeof($grp)==sizeof($vise))

sizeof n'est pas approprié, pour comparer deux variables tu fais:

 if ($grp == $vise)
tout simplement

sizeof(..) c'est pour obtenir le nombre d'éléments d'un array

et ta boucle for sur sizeof($vise) si $vise n'est pas un array, a première vue ce n'en est pas un, ça ne peut pas marcher.

et le bout de code que tu mets ne correspond pas à ce que tu demandes.

Cordialement

@lain
0
gemça
 
bonsoir alain,

je compare bien deux variables array $grp et $vise ($vise vient d'un unserialize de la colone Data de la table).
C'est pour cela que je teste d'abord leur tailles avec sizeof(..).
Ensuite, dans la boucle for, chaque fois que la condition if est vrai le score s'incremente.
j'ai donc pour chaque Id de ma table un score qui est généré.

par exemple
Id1 aura $score=10
Id2 aura $score=12
Id3 aura $score=9
Id4 aura $score=15

je voudrasi "simplement" voir a l'écran un affichage du style.

Score:
Id4 avec score=15
Id2 avec score=12
Id1 avec score=10
Id3 avec score=9

mais je n'arrive pas a faire afficher en même temps les données de la table en fonctiuon du score..
En tout cas merci pour ton aide.
0

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

Posez votre question
gemça
 
Je crois que je viens de trouver en faisant, après la boucle while..:

arsort ($score);
foreach($score as $key => $val){
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){
if($key==$row["ID"]){
echo "<hr>Votre fichier <b>".$Fnm."</b> avec tolérence à ".$ecart."% score ".$val."/".($numgrp+1)." avec:<br>";
echo"ID:".$row["ID"].":<b>".$row["Nom"]."</b><br>";
echo"Localité: ".$row["Localite"]."<br>";
}
}
}

Ca fera surement bondir les programmeurs.. mais bon amateurismle oblige et sa semble fonctionner
Merci @lin
0
Alain42
 
Bonjour,

sizeof() qui est identique à count() compte le nombre d'éléments d'un tableau ou si pas tableau le nombre de propriétés.

Donc ça ne peut pas te servir a compare deux varaibles.

pour comprare deux variables

$var1= 1235
et
$var2=1630

par exemple

if($var1==$var2) egal ?

if($var1!=$var2) different ?

if($var1>$var2) plus grand ?

if($var1<$var2) plus petit ?
0
Alain42
 
Bonjour,

Ca marche mais tu te complique, tu fais plusieurs fois appel à la base par mysql_query pour rien.
Ne le prend pas mal.

Essayes en:

1- requette à la base qui va te sortir tous les champs de ta table dans l'ordre des scores décroissants
2- par boucle While affichage des résultats avec les champs que tu veux

//connexion a la base puis
$req="SELECT * FROM ta_table ORDER BY score DESC";
$result = mysql_query($req) or die ("Pb avec la requette ".mysql_error());
	while($row = mysql_fetch_array($result)){
	// la tu mets ce que tu veux
		echo "<hr>Votre fichier <b>".$Fnm."</b> avec tolérence à ".$ecart."% score ".$val."/".($numgrp+1)." avec:<br>";
		echo"ID:".$row["ID"].":<b>".$row["Nom"] ."</b>".$row['score']."<br>";
		echo"Localité: ".$row["Localite"]."<br>";
	}
0