Une requete compliquée...

Eléphanteau du PHP | 13 Messages

20 sept. 2006, 12:38

Plop,

J'ai une requete :
$table = mysql_query('SELECT @rank := @rank + 1 AS rank, pseudo, score, level, timestamp FROM
 arkanoid ORDER BY score DESC LIMIT '.$premier_score.', '.$_SESSION['NB_score_page']);
J'ai ensuite mis le resultat sous forme de tableau pour pouvoir classer les colonnes.
Le probleme, c'est que quand le tri se fait par ordre alphabetique (dans le cas d'un classement par pseudo), le classement est sensible à la casse.
C'est à dire que j'aurais par exemple :

Code : Tout sélectionner

1 - Alpha 2 - Beta 3 - Omega 4 - alpha 5 - beta 6 - omega
Comment faire pour avoir un classement correct ?

* Modifier ma requete avec UPPER pour mettre la 1ere lettre de chaque pseudo en majuscule ? (j'ai pas trop d'idée sur la facon de proceder) ?

* Modifier ma méthode de classement ?
---> Fonction :
function classement ($tableau, $col, $direction) {
   foreach($tableau as $k=>$v){
      $cle[$k] = $v[$col];
   }
   array_multisort($cle, $direction, $tableau);
   return $tableau;
} 
---> Appel de la fonction :
$scores = classement ($scores, $tri_champ, SORT_ASC);
* Ou modifier mon tableau $scores pour mettre la 1ere lettre de chaque pseudo en MAJ ?


Edit : J'ai essayé de mettre en majuscule la 1ere lettre du pseudo, mais ca marche pas ^^
for ($i=0; $i<$total_score; $i++) { ucfirst(strtolower($scores[$i][1])); }

J'espère que j'ai été assez clair :)
Merci d'avance :)

Eléphant du PHP | 413 Messages

20 sept. 2006, 13:39

la clause ORDER BY de mysql est "case insensitive".
donc si tu ajoutes "ORDER BY ..., pseudo" :
mysql_query('SELECT @rank := @rank + 1 AS rank, pseudo, score, level, timestamp FROM
 arkanoid ORDER BY score, pseudo DESC LIMIT '.$premier_score.', '.$_SESSION['NB_score_page']); 
ça devrait marcher...

la doc en anglais est ici :
http://dev.mysql.com/doc/refman/4.1/en/ ... -rows.html
--
Goeb

Eléphanteau du PHP | 13 Messages

20 sept. 2006, 13:55

Merci pour ta réponse, mais en fait, comme le classement se fait en dehors de la requete, il faut que je modifie le champ "pseudo" du tableau, je ne peux interagir lors de la requete ^^

Mais j'ai corrigé le tableau pour mettre la premiere lettre en MAJ et ca marche :)
J'ai mis ca :
for ($i=0; $i<$total_score; $i++) { $scores[$i][1] = ucfirst($scores[$i][1]); }
Merci :)