Page 1 sur 1

trier un calcul de tableau !! :\

Posté : 01 févr. 2006, 11:58
par jimmy
bonjour,

j'ai besoin d'aide sur un tri de tableau a partir de donnée recuperées sur sql.

La problematique est la suivante : j'aimerai trier le tableau de cette requete sur les valeur decroissante "$total" qui resulte de l'addition des valeur des donnée recuperées : $total=$ligne[1]+$ligne[0]; (qui vaut aussi $total=$score1+$score2;)

J'ai essayer avec ORDER BY total DESC mais ce ne marche pas...ce qui ne m'etonne pas car total n'est pas dans la table !!


Bref je cale... !!

Je vous joins le code et si vous y voyez des ameliorations je suis preneur (si possible avec les explications) car je suis debutant :)


echo "<table width=450 align=\"center\" nowrap border=\"1\">";

echo "<tr><td width=120 align=\"center\"><font color=\"#CC9933\"><b>".Equipe."</td></b></font><td width=120 align=\"center\"><font color=\"#CC9933\"><b>".butdom."</td></b></font><td width=80 align=\"center\"><font color=\"#CC9933\"><b>".butext."</td></b></font><td width=80 align=\"center\"><font color=\"#CC9933\"><b>".buttotal."</td></b></font></tr>";

$result20 = $db->sql_query("select sum(score1)as butdom , sum(score2) as butext, tid1 from " . $prefix . "_league_schedule where score1 IS NOT NULL GROUP BY tid1 ");
while($ligne = $db->sql_fetchrow($result20)) {
$score1=$ligne[0];
$score2=$ligne[1];
$tid1=$ligne[2];
$total=$ligne[1]+$ligne[0];

$i= $i+1;

echo "<tr>
<td width=120 align=\"center\">". getTeamNamewithURL($tid1, "modules.php?name=League&file=index&op=team&tid=$tid1&sid=45&lid=1") ."</td>
<td width=120 align=\"center\">".$score1."</td>
<td width=120 align=\"center\">".$score2."</td>
<td width=120 align=\"center\">".$total."</td>

</tr>";
}
Merci

Jimmy

Posté : 01 févr. 2006, 12:32
par zigz4g
Salut,

Il est vrai que tu ne peux pas faire un tri sur ta requette car la contrainte SQL ORDER BY ne permet pas de faire un tri sur des alias.

Maintenant pour resoudre ton probleme, je peux te proposer cette solution :
<?php
$result20 = $db->sql_query("select sum(score1)as butdom , sum(score2) as butext, tid1 from " . $prefix . "_league_schedule where score1 IS NOT NULL GROUP BY tid1 ");

$i = 0;
while($ligne = $db->sql_fetchrow($result20)) {
    $score1 = $ligne[0];
    $score2 = $ligne[1];
    $tid1 = $ligne[2];
    $total = $ligne[1] + $ligne[0];
    $all[$total] = array($score1, $score2, $tid1);
    $i++;
}
//Le tableau devrait etre trie apres cette instruction.
ksort($all);
//Il ne te reste plus qu'a refaire une boucle pour ton affichage.
?>
Je n'ai pas compris ce bout de code :
$i= $i+1;
Tu fais une incrementation mais tu n'as pas initialiser ta variable $i. Peut etre est-ce dans un autre endroit de ton code ?
Je l'ai donc remplace par ce qui est au dessus.
J'espere que cela fonctionnera, je ne peux pas tester donc redonne moi le retour de ce script.

Bonne journee.

Posté : 01 févr. 2006, 17:31
par jimmy
salut merci de ta reponse mais ca ne marche pas ??


Il ne te reste plus qu'a refaire une boucle pour ton affichage. !?!?

Etant newbie.... je cale aussi la dessus.... j'ai tenté une operation du style avec "for mais en vain :(

$i= $i+1; => effectivement la variable est initialiser un peu plus haut dans le coed ;)


Jim

Posté : 01 févr. 2006, 17:38
par zigz4g
Ca te donne quelles informations cette instruction, juste avant et apres le ksort :

Code : Tout sélectionner

print_r($all);

Posté : 02 févr. 2006, 02:18
par jimmy
Avecprint_r($all); apres le ksort j'obtiens :
Array ( [7] => Array ( [0] => 6 [1] => 1 [2] => 51 ) [11] => Array ( [0] => 7 [1] => 4 [2] => 43 ) [19] => Array ( [0] => 10 [1] => 9 [2] => 53 ) [23] => Array ( [0] => 16 [1] => 7 [2] => 41 ) [24] => Array ( [0] => 11 [1] => 13 [2] => 54 ) [27] => Array ( [0] => 17 [1] => 10 [2] => 46 ) [30] => Array ( [0] => 12 [1] => 18 [2] => 39 ) [51] => Array ( [0] => 33 [1] => 18 [2] => 25 ) [53] => Array ( [0] => 28 [1] => 25 [2] => 47 ) [56] => Array ( [0] => 36 [1] => 20 [2] => 44 ) [57] => Array ( [0] => 36 [1] => 21 [2] => 40 ) [60] => Array ( [0] => 23 [1] => 37 [2] => 37 ) [67] => Array ( [0] => 38 [1] => 29 [2] => 33 ) [74] => Array ( [0] => 38 [1] => 36 [2] => 42 ) [76] => Array ( [0] => 49 [1] => 27 [2] => 45 ) [77] => Array ( [0] => 35 [1] => 42 [2] => 26 ) [78] => Array ( [0] => 27 [1] => 51 [2] => 10 ) [81] => Array ( [0] => 46 [1] => 35 [2] => 23 ) [84] => Array ( [0] => 45 [1] => 39 [2] => 6 ) [88] => Array ( [0] => 44 [1] => 44 [2] => 27 ) [90] => Array ( [0] => 67 [1] => 23 [2] => 35 ) [91] => Array ( [0] => 58 [1] => 33 [2] => 14 ) [93] => Array ( [0] => 50 [1] => 43 [2] => 3 ) [94] => Array ( [0] => 42 [1] => 52 [2] => 36 ) [96] => Array ( [0] => 60 [1] => 36 [2] => 34 ) [97] => Array ( [0] => 48 [1] => 49 [2] => 19 ) [99] => Array ( [0] => 70 [1] => 29 [2] => 28 ) [101] => Array ( [0] => 60 [1] => 41 [2] => 11 ) [106] => Array ( [0] => 58 [1] => 48 [2] => 13 ) [107] => Array ( [0] => 73 [1] => 34 [2] => 4 ) [108] => Array ( [0] => 56 [1] => 52 [2] => 2 ) [110] => Array ( [0] => 58 [1] => 52 [2] => 9 ) [114] => Array ( [0] => 74 [1] => 40 [2] => 29 ) [115] => Array ( [0] => 77 [1] => 38 [2] => 21 ) [117] => Array ( [0] => 74 [1] => 43 [2] => 30 ) [124] => Array ( [0] => 79 [1] => 45 [2] => 17 ) [125] => Array ( [0] => 86 [1] => 39 [2] => 7 ) [132] => Array ( [0] => 94 [1] => 38 [2] => 15 ) [140] => Array ( [0] => 97 [1] => 43 [2] => 24 ) [148] => Array ( [0] => 108 [1] => 40 [2] => 12 ) [151] => Array ( [0] => 122 [1] => 29 [2] => 20 ) [166] => Array ( [0] => 118 [1] => 48 [2] => 5 ) [190] => Array ( [0] => 127 [1] => 63 [2] => 18 ) )
et pour avant le ksort j'obtiens :
Array ( [93] => Array ( [0] => 50 [1] => 43 [2] => 3 ) [108] => Array ( [0] => 56 [1] => 52 [2] => 2 ) [107] => Array ( [0] => 73 [1] => 34 [2] => 4 ) [166] => Array ( [0] => 118 [1] => 48 [2] => 5 ) [84] => Array ( [0] => 45 [1] => 39 [2] => 6 ) [125] => Array ( [0] => 86 [1] => 39 [2] => 7 ) [78] => Array ( [0] => 27 [1] => 51 [2] => 10 ) [110] => Array ( [0] => 58 [1] => 52 [2] => 9 ) [101] => Array ( [0] => 60 [1] => 41 [2] => 11 ) [148] => Array ( [0] => 108 [1] => 40 [2] => 12 ) [106] => Array ( [0] => 58 [1] => 48 [2] => 13 ) [91] => Array ( [0] => 58 [1] => 33 [2] => 14 ) [132] => Array ( [0] => 94 [1] => 38 [2] => 15 ) [124] => Array ( [0] => 79 [1] => 45 [2] => 17 ) [190] => Array ( [0] => 127 [1] => 63 [2] => 18 ) [97] => Array ( [0] => 48 [1] => 49 [2] => 19 ) [151] => Array ( [0] => 122 [1] => 29 [2] => 20 ) [115] => Array ( [0] => 77 [1] => 38 [2] => 21 ) [90] => Array ( [0] => 67 [1] => 23 [2] => 35 ) [81] => Array ( [0] => 46 [1] => 35 [2] => 23 ) [140] => Array ( [0] => 97 [1] => 43 [2] => 24 ) [51] => Array ( [0] => 33 [1] => 18 [2] => 25 ) [77] => Array ( [0] => 35 [1] => 42 [2] => 26 ) [88] => Array ( [0] => 44 [1] => 44 [2] => 27 ) [99] => Array ( [0] => 70 [1] => 29 [2] => 28 ) [114] => Array ( [0] => 74 [1] => 40 [2] => 29 ) [117] => Array ( [0] => 74 [1] => 43 [2] => 30 ) [67] => Array ( [0] => 38 [1] => 29 [2] => 33 ) [96] => Array ( [0] => 60 [1] => 36 [2] => 34 ) [94] => Array ( [0] => 42 [1] => 52 [2] => 36 ) [60] => Array ( [0] => 23 [1] => 37 [2] => 37 ) [11] => Array ( [0] => 7 [1] => 4 [2] => 43 ) [30] => Array ( [0] => 12 [1] => 18 [2] => 39 ) [57] => Array ( [0] => 36 [1] => 21 [2] => 40 ) [23] => Array ( [0] => 16 [1] => 7 [2] => 41 ) [74] => Array ( [0] => 38 [1] => 36 [2] => 42 ) [56] => Array ( [0] => 36 [1] => 20 [2] => 44 ) [76] => Array ( [0] => 49 [1] => 27 [2] => 45 ) [27] => Array ( [0] => 17 [1] => 10 [2] => 46 ) [53] => Array ( [0] => 28 [1] => 25 [2] => 47 ) [7] => Array ( [0] => 6 [1] => 1 [2] => 51 ) [19] => Array ( [0] => 10 [1] => 9 [2] => 53 ) [24] => Array ( [0] => 11 [1] => 13 [2] => 54 ) )

Posté : 02 févr. 2006, 12:17
par zigz4g
Peux tu faire le meme affichage mais en rajoutant ceci :
<?php
echo '<pre>';
print_r($all);
echo '</pre>';
?>
Merci c'est pour mieux lire tes resultats.

Posté : 02 févr. 2006, 12:53
par Invité
mis apres le kssort ca donne :

Code : Tout sélectionner

Equipe butdom butext buttotal Array ( [7] => Array ( [0] => 6 [1] => 1 [2] => 51 ) [11] => Array ( [0] => 4 [1] => 7 [2] => 38 ) [19] => Array ( [0] => 10 [1] => 9 [2] => 53 ) -------je coupe pour en pas faire trop long ------------ ) et avant le ksort ca la meme chose dans l'ordre inverse.... Merci....j'ai bien le classement que j'attend :) Reste que les array etant un peu ma bete noire pour le moment...... Je n'arrive pas a affiché ces donnée dans un tableau :( Je serai tenté d'essayer la commande : foreach($all as $result) { echo $result; } mais sans succés... je me retrouve avec une liste "array" encore merci :)

Posté : 02 févr. 2006, 12:57
par jimmy
c moi au dessus :lol:

Posté : 02 févr. 2006, 13:54
par sadeq
Qui a dit que l'ORDER BY ne marche pas avec les alias ? C'est faut : la preuve, c'est ce qu'il te faut pour résoudre ton taf.

il faut écrire la requête qui calcule le total pour chaque tid1 comme ça:
select sum(score1)as butdom , sum(score2) as butext, (sum(score1)+sum(score2)) as total,  tid1 from " . $prefix . "_league_schedule where score1 IS NOT NULL GROUP BY tid1 ORDER BY total DESC