Place dans un classement et rang parmi des enregistrements MySQL

juin 4, 2009

Si vous voulez réaliser un Top 1000 pour votre jeu en ligne ou plus généralement connaitre quelle est la place d’un de vos tuple dans un ensemble trié d’enregistrements, voici une petite astuce qui vous permettra d’obtenir le résultat avec un moyen 100 % SQL ( pas besoin de variable compteur coté serveur).

Imaginez une table players contenant les colonnes “pseudo, score et time_played”. Notre objectif est de connaitre la position d’un joueur dans le classement total connaissant le champ “pseudo”. L’obtention de son rang va se faire en 3 temps :

1. On va commencer par initialiser une variable MySQL avec la commande SET:
SET @counter = 0;

2. L’étape suivante consiste à effectuer une première requête qui va compter et créer une colonne indiquant le rang de chacun des enregistrements au sein de la table.
SELECT pseudo,score,time_played,@counter:=@counter+1 AS rang FROM players ORDER BY score ASC;

3. Enfin, nous allons isoler l’enregistrement qui nous intéresse, à savoir, celui dont la valeur pseudo est celle que nous cherchons.

Il s’agit d’une simple requête du type

SELECT place,pseudo FROM (*****) AS subrequest WHERE pseudo = ‘John Doe’;

Si vous avez suivi, vous aurez d’ores et déja compris qu’il va falloir remplacer les ***** par notre requête construite à l’étape 2 (il s’agit de ce qu’on appelle une sous- requete). Le résultat obtenu devrait être une table contenant le rang et le pseudonyme de notre joueur ‘John Doe’.

N’hésitez pas à envoyer un commentaire si vous avez besoin d’aide !

Références :
Documentation MySQL

Entry Filed under: mysql. Mots-clefs: .

1 Comment Add your own

  • 1. Thyphoon  |  novembre 8, 2009 at 10:27

    Merci super tuto ! ça marche tres bien
    Et une question si je veux afficher les 5 rang au dessus et 5 rang en dessous de tel Pseudo !
    Exemple “John Doe” est a la 550ème place… et je voudrais donc montré la liste de la 445 a la 555ème place :P y a moyen de faire ça simplement ? En tout cas merci !

    Répondre

Leave a Comment

Required

Required, hidden

Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackback this post  |  Subscribe to the comments via RSS Feed


Catégories

Articles récents

Mots-clefs

2.0 java blogosphère admin apache configuration CSS debian desactiver desinstaller démons ECMAScript fluxbb forum gpg GWT httpd.conf IDE IM inetd install installer php+mysql inutiles iphone iphoneOS jabber java javamail Javascript kopete mysql ménage netbeans new Function php phpbb privacité pstree punbb remove daemon serveur dédié services services linux sujet tomcat utf8 xinetd

Méta

Articles les plus consultés