php - mysql按分数/点数对用户进行排名

标签 php mysql sql select

下面的查询对于按分数排名的普通用户来说很酷,但我需要一个具有相同排名结果的查询,以获得表中相同的分数

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

谢谢

最佳答案

您确定您给定的查询是否正常工作?我记得要在 SELECT 之后完成 ORDER BY,从而使您的排名按 ID ASC 或类似方式排序。

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

简化版:

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

关于php - mysql按分数/点数对用户进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13393422/

相关文章:

mysql - 使用 Coldfusion 迭代查询以在 Charts.js 中使用

sql - 将多个表格结果复制到 Excel

javascript - 使用 PHPMailer 发送电子邮件后重定向

php - 将 MySQL 过程与函数一起使用

php - 网站自动时钟

mysql - 如何获取另一个表的字段信息

mysql - 食谱数据库,按成分搜索

php - 间接修改重载元素没有效果

java - 当数据库中没有记录时,结果集抛出语法错误

mysql - SQL查询多表