Une requete compliquée...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Une requete compliquée...

par Artus » 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 :)

par goeb » 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

Une requete compliquée...

par Artus » 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 :)