2012-11-15 5 views
0

ci-dessous requête cool pour les utilisateurs normaux classement par le score mais je besoin d'une requête avec le même résultat de classement pour même score dans le tableaumysql utilisateurs classement par le score/Points

SET @rank = 0; 
SELECT * FROM (
    SELECT @rank:[email protected] + 1 AS rank,score, user_id FROM site_crossword_members ORDER BY score DESC 
) as tmp; 

grâce

Répondre

2

Etes-vous sûr que votre requête donnée fonctionne même correctement? Je me souviens ORDER BY à faire après SELECT, ce qui rend votre classement par ID ASC ou similaire.

SELECT user_id, 
    CASE WHEN @score != score THEN @rank := @rank + 1 ELSE @rank END AS rank, 
    @score := score AS dummy_value 
FROM ( SELECT score, user_id 
     FROM site_crossword_members, 
      (SELECT @rank := 0, @score := NULL) AS vars 
     ORDER BY score DESC) AS h 

Version abrégée:

SELECT user_id, 
    @rank := @rank + (@score != score) AS rank, 
    @score := score AS dummy_value 
FROM ( SELECT score, user_id 
     FROM site_crossword_members, 
      (SELECT @rank := 0, @score := NULL) AS vars 
     ORDER BY score DESC) AS h 
+0

cette réponse est correcte –

2

Essayez cette requête (version avec des variables) -

SET @rank = 0; 
SET @score = NULL; 

SELECT 
    rank, score, user_id 
FROM (
    SELECT 
    score, 
    user_id, 
    IF(@score = score, @rank := @rank + 1, @rank := 1) AS rank, 
    @score := score 
    FROM site_crossword_members 
    ORDER BY score DESC 
) t; 
+0

Je suis désolé, cette réponse est incorrecte –

+0

Qu'est-ce que Incorrect? – Devart

+0

La question pourrait être lu dans plusieurs dit. Le vôtre fonctionne au besoin pour réinitialiser le classement sur un nouveau score, mais il voulait que les personnes ayant le même score partagent des rangs. –