Place dans un classement et rang parmi des enregistrements MySQL

4 juin 2009 at 17 h 06 min 1 commentaire

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. Tags: .

Iphone simulator’s mess : get your AVFoundation audio and video working ! Astuce iPhone : afficher la taille d’un CGRect avec NSLog

Un commentaire Add your own

  • 1. Thyphoon  |  8 novembre 2009 à 10 h 27 min

    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😛 y a moyen de faire ça simplement ? En tout cas merci !

    Répondre

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Articles récents


%d blogueurs aiment cette page :