Classement par point dans MySQL

bonjour,

J’ai une table dans Phpmyadmin avec une colonne points ou j’inscrit pour chaque membre le nombre de points qu’il a eut dans son espace membre. Et je voudrai savoir comment faire pour que dans mon autre colonne “classement” je puisse avoir le classement en fonction des points??
exemple : classement | points
1 | 24
2 | 18
3 | 11
4 | 9

voila merci pour vos réponses.

Tu peux faire ta requête SQL pour qu’elle te retourne dans l’ordre décroissant les notes des membres et mettre la place (le numéro du classement) dans ton programme (celui qui utilise le SQL : PHP, JSP, etc.).

(Cela dit, s’il est possible de retourner des paires place-score directement depuis le serveur MySQL : la solution m’intéresse)

Oui je sais mais je veux que ça soit automatique car je ne serai pas la pour écrire les nombre mais je sais qu’on peut le faire car j’ai trouvé ce lien mais ça ne marche pas donc je demande .

ben ca peut etre automatique sans avoir le classement dans la base de données

par exemple
SELECT user FROM membres ORDER BY points DESC LIMIT=10;

ici membres correspond a la table utilisée
user, c’est pour avoir le nom de tes membres

LIMIT = 10 : si tu le laisse ca te donne seulement les 10 premiers, si tu veux le classement total, t’as juste a enlever ca :stuck_out_tongue:

Regarde la page 15 de ce “livre” : www.slideshare.net…

SET @rank := 0;
SELECT @rank := @rank + 1 AS rank, country, php FROM statPHP ORDER BY php;

(la 16ème peut également t’intéresser)

Merci je vais essayer tout ça . Je te tiendrai au courant.

Alors ça marche quand je fais une requete dans phpmyadmin mais comment je mets ça dans mon script php

Avec mysql_query(), comme toute requête MySQL

Voici mon code ancien code :


<?php
mysql_connect('localhost', 'iphoneinside', '') OR die('Erreur de connexion');
mysql_select_db('iphoneinside') OR die('Sélection de la base impossible'); 

$reponse = mysql_query("SELECT rank FROM regis WHERE pseudo='" . $_COOKIE['username'] . "'"); // Requête SQL


// On fait une boucle pour lister tout ce que contient la table :

while ($donnees = mysql_fetch_array($reponse) )
{
?>
<?php echo $donnees['rank']; ?>
<?php
}

mysql_close(); // Déconnexion de MySQL
?>

Comment je fais pour introduire ce code à l’intérieur car j’ai essayer de les mettres a la suite et ça ne marche pas


SET @rank :=0;");
SELECT @rank := @rank +1 AS rank, nbclic FROM regis ORDER BY nbclic DESC WHERE pseudo='" . $_COOKIE['username'] . "'");

Merci pour vos réponses

Heu :slight_smile: plutôt qu’une requête, puisque tu es dans PHP, utilise un entier $i que tu incrémentes, ça ira plus vite et ça sera portable d’un SGBD à un autre.

Je ne vois pas, comment on fait ce que vous dites dsl.

Sans-Nom te fait la même suggestion que moi : Vu que tu utilise PHP, au d’utiliser une variable SQL pour donner le rang, utilise une variable PHP.

si tu veux afficher le classement complet :


<?php
      mysql_connect('localhost', 'iphoneinside', '') 
                OR die('Erreur de connexion'); 
      mysql_select_db('iphoneinside') 
                OR die('Sélection de la base impossible');  

     $s = "SELECT `rank`,`pseudo` FROM `regis` ORDER BY `rank`";
     $reponse = mysql_query($s); 
     while ($donnees = mysql_fetch_array($reponse) ) 
          echo $donnees['rank']" : ".$donnees['pseudo']."<br />"; 

     mysql_close(); 
?>

t’as requète est assez bizzare :

SELECT @rank := @rank +1 AS rank, nbclic FROM regis ORDER BY nbclic DESC WHERE pseudo=’" . $_COOKIE[‘username’] . “’”);

tu cherche le rank d’une personne, donc a priri une réponse !
et tu effectue un ORDER BY, donc un “tri”

c’est quoi exactement ce que tu veux ?
Edité le 31/08/2007 à 18:11

Il ne cherche pas le rank, il retourne la valeur de la variable rank.

je vois pas du tout comment fair epour ton explication

Petite clarification: Tu veux bien stocker la place (le classement) du membre dans un champ de ta table MySQL ?

Je veux dire la position d’une personne dans mon classement sauf que mon classement je le fais avec la requète bizarre


SET @rank :=0;
SELECT @rank := @rank +1 AS rank, nbclic FROM regis ORDER BY nbclic DESC WHERE pseudo='" . $_COOKIE['username'] . "'

exemple : vous êtes le 4 eme de mon classement.

merci pour vos réponses
Edité le 31/08/2007 à 20:00

ça :

for ( $i = 0; $donnees = mysql_fetch_array($reponse); ++$i ) echo $i, " : ", $donnees[‘pseudo’], “
”;

Corrige ta requête, il y a une injection SQL dedans (ie: on peut effacer ta base de données telle quelle)

Non je n’arrive qu’a voir mais pas à stocker la place (le classement) dans dans un champs de la table SQL sinon je pense que j’aurai pu me débrouiller tout seul.

En gros après ma requète il me fait un tableau :

Textes complets
rank | nbclic
1 | 9
2 | 8
3 | 5
4 | 0

Mais il ne stocke pas ses données dans mon tableau avec ce code :


SET @rank :=0; 
SELECT @rank := @rank +1 AS rank, nbclic FROM regis ORDER BY nbclic DESC ;

Edité le 01/09/2007 à 10:48

Ah. Tu veux la stocker, alors ça ne marchera pas :slight_smile:

J’ai pas de solution SQL toute faite, désolé.