Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/09/2007, 23h54   #1
Invité régulier
 
Inscription : avril 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 39
Points : 8
Points : 8
Par défaut "Rang" d'un enregistrement dans une requête

Bonjour,

Je voudrais obtenir la position d'un enregistrement dans une table, selon un critère donné, désolé si je ne suis pas précis, je voudrais par exemple obtenir la position d'un joueur dans un classement.

Exemple :

SELECT *
FROM JOUEURS
ORDER BY (INDICE_SCORE_1*INDICE_SCORE_2 + 1.5*INDICE_SCORE_3), ID

Admettons que (INDICE_SCORE_1*INDICE_SCORE_2 + 1.5*INDICE_SCORE_3) soit la formule pour calculer le score, comment obtenir la position d'un certain joueur (identifié par le champ "ID" par exemple) dans ce classement ?

Je suis clair ?
Takusen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 13h09   #2
Membre Expert
 
Avatar de Adjanakis
 
Inscription : avril 2004
Messages : 734
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : avril 2004
Messages : 734
Points : 1 281
Points : 1 281
Bonjour,

Il faudrait faire une jointure avec la table elle même afin de pouvoir calculer le nombre de joueurs ayant un score strictement plus Gros. Mais bon, c'est relativement couteux et devrait surement être géré de façon applicative si c'est possible.

Code :
1
2
3
 
SELECT *, count((J1.INDICE_SCORE_1*J1.INDICE_SCORE_2 + 1.5*J1.INDICE_SCORE_3) < (J2.INDICE_SCORE_1*J2.INDICE_SCORE_2 + 1.5*J2.INDICE_SCORE_3)) + 1 AS Classement FROM JOUEURS J1,JOUEURS J2
ORDER BY (J1.INDICE_SCORE_1*J1.INDICE_SCORE_2 + 1.5*J1.INDICE_SCORE_3), J1.ID
PS: je ne suis plus sûr de la syntaxe de ce genre de chose
__________________
Pensez au tag
Adjanakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 20h04   #3
Invité régulier
 
Inscription : avril 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 39
Points : 8
Points : 8
Malheureusement il est ici imposé un mode "temps réel" ... Je te remercie pour ta solution qui est excellente, le seul problème que j'y vois (mais, je m'en excuse, je n'avais pas décrit cette précision), c'est qu'il ne départage pas en cas d'égalité.

Si les joueurs 3,4,5 sont à égalité, ils auront tous 3 la position "3", j'aimerais pouvoir les départager en fonction de leur ID (admettons que le plus ancien joueur ait par exemple la "priorité" sur les 2 autres nouveaux), une idée ?
Takusen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 23h10   #4
Membre Expert
 
Avatar de Adjanakis
 
Inscription : avril 2004
Messages : 734
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : avril 2004
Messages : 734
Points : 1 281
Points : 1 281
Oui, il suffit d'ajouter des fonctions IF imbriquées et l'algo serait:

Code :
1
2
 
IF(SCORE1>SCORE2,0,IF(SCORE1<SCORE2,1,ID1>ID2))
__________________
Pensez au tag
Adjanakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 12h49   #5
Invité régulier
 
Inscription : avril 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 39
Points : 8
Points : 8
Re-bonjour,

Je suis désolé j'ai regardé tant que j'ai pu, mais je n'ai pas compris comment utiliser cela dans une requête pour obtenir la position du joueur ... tu peux juste détailler un peu plus s'il te plait ?
Takusen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 14h06   #6
Membre Expert
 
Avatar de Adjanakis
 
Inscription : avril 2004
Messages : 734
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : avril 2004
Messages : 734
Points : 1 281
Points : 1 281
Citation:
Envoyé par Adjanakis Voir le message
Oui, il suffit d'ajouter des fonctions IF imbriquées et l'algo serait:

Code :
1
2
 
IF(SCORE1>SCORE2,0,IF(SCORE1<SCORE2,1,ID1>ID2))
Il faut remplacer chaque variable par l'expression qui lui correspond:
Citation:
SCORE1: (J1.INDICE_SCORE_1*J1.INDICE_SCORE_2 + 1.5*J1.INDICE_SCORE_3)
SCORE2: (J2.INDICE_SCORE_1*J2.INDICE_SCORE_2 + 1.5*J2.INDICE_SCORE_3)
ID1: J1.ID
ID2: J2.ID
__________________
Pensez au tag
Adjanakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 14h53   #7
Invité régulier
 
Inscription : avril 2006
Messages : 39
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 39
Points : 8
Points : 8
Merci beaucoup je vais tenter de travailler avec ça
Takusen est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h42.


 
 
 
 
Partenaires

Hébergement Web