Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2547 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête SQL - Position dans un classement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête SQL - Position dans un classement

n°2134734
luckylp56
Posté le 04-04-2012 à 09:21:31  profilanswer
 

Bonjour à tous,
 
J'ai un petit soucis pour une requête SQL.
 
Voici les données :
ID | Nom | Vote_plus | Vote_moins
 
Je cherche à obtenir le classement de cette liste par l'addition de vote_plus et vote_moins.
 
Pour l'instant ma requête a cette tête :
SELECT *, vote_plus - vote_moins AS votes_total FROM ma_table ORDER BY votes_total DESC
 
Mais cela n'obtient évidemment pas la position dans le classement, mais remplit une des deux tâches à savoir le tri par score.
Les infos que je souhaite ainsi afficher sont : Le nom, le score total (addition de vote plus et vote moins) et la position dans le classement.
 
Est ce quelqu'un a une idée de la requête que je dois utiliser pour obtenir la position dans le classement ?
 
Merci par avance de votre aide  :jap:


Message édité par luckylp56 le 04-04-2012 à 10:41:57
mood
Publicité
Posté le 04-04-2012 à 09:21:31  profilanswer
 

n°2134746
olivthill
Posté le 04-04-2012 à 09:51:15  profilanswer
 

Avec quelle base de données (Oracle, MySQL, ...) ?
 
Avec Oracle, la solution serait Select rownum, ...

n°2134771
luckylp56
Posté le 04-04-2012 à 10:34:47  profilanswer
 

Au temps pour moi, j'ai oublié de préciser : c'est du MySQL.
 
Merci de ton aide olivthill
 
Ps : petit edit dans mon message précédent avec les infos que je souhaite obtenir


Message édité par luckylp56 le 04-04-2012 à 10:42:30
n°2134973
luckylp56
Posté le 05-04-2012 à 10:04:13  profilanswer
 

Quelqu'un peut m'aiguiller ? Je suis assez autodidacte mais je sèche sur cette question.

n°2135102
luckylp56
Posté le 05-04-2012 à 22:57:24  profilanswer
 

Je viens de passer deux heures desssus sans trouver de solution... Toute aide est la bienvenue :-)

n°2135206
olivthill
Posté le 06-04-2012 à 14:13:01  profilanswer
 

Habituellement une requête SQL s'utilise à l'intérieur d'un programme (est-ce le cas ici ? en quel language ? (PHP Java, autre ?)) et c'est la partie autour de la requête qui faire du reformatage, et qui éventuellement ajoute des numéros de ligne, etc.

n°2135228
Tibar
Posté le 06-04-2012 à 15:13:30  profilanswer
 

Salut,
 
Tu peux regarder ici, il y a la solution pour faire un équivalent de rownum en mysql : http://craftycodeblog.com/2010/09/ [...] ith-mysql/
(2è partie de la réponse, mais tout l'article est intéressant).
(sinon, d'accord avec olivthill, la présentation n'est pas vraiment du ressort du moteur de bdd)


Message édité par Tibar le 06-04-2012 à 15:14:26
n°2139440
luckylp56
Posté le 27-04-2012 à 12:10:44  profilanswer
 

Merci Tibar, ta réponse m'a pas mal aidé !
 
Je m'en suis sorti avec un :
SELECT *, @rownum:=@rownum+1 AS rownum, vote_plus - vote_moins AS votes_total FROM ma_table, (SELECT @rownum:=0) r

n°2139472
luckylp56
Posté le 27-04-2012 à 14:56:15  profilanswer
 

Up
 
Voici on j'en suis :
 
SELECT a.name,(SELECT COUNT(DISTINCT (b.vote_up - b.votes_down)) FROM com_items AS b WHERE (b.votes_up - b.votes_down) >= (a.votes_up - a.votes_down)) AS 'position' FROM matable AS a WHERE (SELECT COUNT(DISTINCT (b.votes_up - b.votes_down)) FROM matable AS b WHERE (b.votes_up - b.votes_down) >= (a.votes_up - a.votes_down)) BETWEEN ".$deb." AND ".$fin." ORDER BY position ASC LIMIT ".$lim.";
 
 
Vote up = Vote plus
Vote down = Vote moins
 
C'est barbar comme ça mais ça fonctionne correctement et me permet d'obtenir les classements entre 2 valeurs ($deb et $fin).

n°2140408
Tibar
Posté le 03-05-2012 à 12:53:15  profilanswer
 

Salut,
 
C'est peut être un peu plus lisible comme ça :  
 
SELECT * FROM
(
SELECT id as IDENTIFIANT
   --, nom as NOM  
     , vote_p - vote_m as SCORE
     , (SELECT COUNT(*) + 1
           FROM "XB_TMP"
          WHERE vote_p - vote_m > (t.vote_p - t.vote_m)) AS CLASSEMENT
  FROM "XB_TMP" AS t
--ORDER BY CLASSEMENT  
) AS RESULT
WHERE CLASSEMENT BETWEEN 1 AND 8
ORDER BY CLASSEMENT
 
En terme de performance, je ne sais pas si ça change grand chose mais je pense que ça t'évite de calculer 2 fois votes_up - vote_down (j'ai créé une table de test avec vote_p et vote_m à la place).
 
Ma requête gère les égalités, je n'ai pas testé la tienne...
 
Tu peux remplacer le * du SELECT * par les champs que tu veux, ça sera plus propre aussi...
 
Bon courage,


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête SQL - Position dans un classement

 

Sujets relatifs
erreur d'importation sauvegarde base de données SQLAide pour requete SQL
Stocker les étapes d'une requête SQL en tableColonne qui change de nom toute seule dans SQL Server
Probleme de position de DIV une ptite aide svpRequête SQL avec jointure
Code vba exportation requête acces vers Excel 
Plus de sujets relatifs à : Requête SQL - Position dans un classement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR