Classement par rapport a un nombre

Classement par rapport a un nombre - PHP - Programmation

Marsh Posté le 15-02-2010 à 19:44:20    

Bonsoir,
 
D'un part, j'ai une table qui contient pour chaque membre, un nombre. De l'autre, un nombre de référence.
J'aimerais faire un classement des membres du plus proche au plus éloigné du nombre de référence et en fonction du membre, afficher son classement.
 
Voici, par exemple la table
 
id_membre  | nombre
--------------------
1              | 10
1              | 15
1              | 20
1              | 25
2              | 12
2              | 18
2              | 19
3              | 5
3              | 17
 
et le nombre de référence : 16
 
Pour l'instant j'ai pas écrit de code, je sais pas comment aborder la chose le plus simplement possible.
 
Merci pour vos suggestions.
 

Reply

Marsh Posté le 15-02-2010 à 19:44:20   

Reply

Marsh Posté le 15-02-2010 à 20:30:38    

ORDER BY valeur_absolue(nombre-16)  
 
valeur_absolue dépend de ton choix de sgbd ( mysql , postgresql , ... )


---------------

Reply

Marsh Posté le 15-02-2010 à 21:22:06    

Merci pour ta réponse.
Je tourne sous mysql.

 

Pour que cela ne me retourne qu'un seul id_membre avec la valeur la plus proche, est-ce correct :

 

SELECT DISTINCT id_membre FROM table ORDER BY ABS(nombre-16)

 

?


Message édité par t'inquete le 15-02-2010 à 21:47:14
Reply

Marsh Posté le 15-02-2010 à 22:05:31    

LIMIT 1


---------------

Reply

Marsh Posté le 15-02-2010 à 22:38:24    

Y'a un truc bizarre.
Si je fais avec le LIMIT 1, il ne me retourne que l'ID le plus proche.
Si je mets le DISTINCT, j'ai un tri dans le désordre mais je n'ai plus que les 3 ID uniques.
Sans le DISTINCT, j'ai le tri dans l'ordre mais j'ai tous les ID qui se répètent.

Message cité 1 fois
Message édité par t'inquete le 15-02-2010 à 23:23:33
Reply

Marsh Posté le 16-02-2010 à 23:14:23    

t'inquete a écrit :

Y'a un truc bizarre.
Si je fais avec le LIMIT 1, il ne me retourne que l'ID le plus proche.
Si je mets le DISTINCT, j'ai un tri dans le désordre mais je n'ai plus que les 3 ID uniques.
Sans le DISTINCT, j'ai le tri dans l'ordre mais j'ai tous les ID qui se répètent.


 
Euuuh... Oui, ce n'est pas bizarre...  :whistle:  
 
 
Le LIMIT limite le nombre d'enregistrements retournés. Avec LIMIT x, Les x premiers enregistrements correspondant à tes conditions sont retournés.
Le DISTINCT supprime les lignes identiques, pour éviter de retourner plusieurs fois la même ligne.
Et sans rien du tout, ca renvoie tout  :na:
 
Dans ton cas ce serait  
 
SELECT id_membre FROM table ORDER BY ABS(nombre-16) LIMIT 1
 
Le DISTINCT ne servirait à rien puisqu'on ne retourne que le premier...


Message édité par Pascal le nain le 16-02-2010 à 23:16:46
Reply

Marsh Posté le 19-02-2010 à 20:47:29    

Bonsoir.

 

Le limit 1 m'affichera que l'ID le plus proche du nombre de référence.

 

Or, moi je souhaite qu'il y ait un classement de chaque ID et qu'il ne m'affiche que le nombre le plus proche du nombre de référence.

 

C'est pour ça que je pense devoir utiliser l'attribut DISTINCT pour ne pas afficher les nombres qui ne m'interessent pas. Et lorsque j'utilise le DISTINCT, ca enleve tous les ID inutiles, mais le tri se fait mal.


Message édité par t'inquete le 19-02-2010 à 22:04:20
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed