trier un calcul de tableau !! :\

Petit nouveau ! | 4 Messages

01 févr. 2006, 11:58

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

Mammouth du PHP | 684 Messages

01 févr. 2006, 12:32

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.
Zigz4g

Petit nouveau ! | 4 Messages

01 févr. 2006, 17:31

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

Mammouth du PHP | 684 Messages

01 févr. 2006, 17:38

Ca te donne quelles informations cette instruction, juste avant et apres le ksort :

Code : Tout sélectionner

print_r($all);
Zigz4g

Petit nouveau ! | 4 Messages

02 févr. 2006, 02:18

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 ) )

Mammouth du PHP | 684 Messages

02 févr. 2006, 12:17

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.
Zigz4g

Invité
Invité n'ayant pas de compte PHPfrance

02 févr. 2006, 12:53

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 :)

Petit nouveau ! | 4 Messages

02 févr. 2006, 12:57

c moi au dessus :lol:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

02 févr. 2006, 13:54

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 
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène