php / mysql - 如何获得用户排名?

时间:2011-01-12 13:08:58

标签: php mysql

例如我有一个这样的表:

name   rating
matei     124
andrei     20
serj       25
john      190
mike       96
andy      245
tom        73

我需要输出这样的东西(按评级排序):

约翰的立场是2;或者,汤姆的位置是5; (我不需要得到所有结果,只需一个)

我怎样才能做到这一点?

提前致谢

5 个答案:

答案 0 :(得分:2)

除非使用ORDER BY子句显式指定排序,否则MySQL不保证查询结果中的行顺序。如果您有一些单独的排序列,则可以使用如下查询:

SELECT count(1) as position
FROM table
WHERE order_column <= {john's order_column value};

如果您没有订购栏,我建议您先定义,“约翰的位置”和“汤姆的位置”是什么意思。

<强>更新 AFAIU,你想获得按评级排序的列表中的位置(对不起,我最初没有得到它)​​。所以,评级将是您的order_column。在这种情况下,你应该决定,如果两个人有相同的评级(谁的位置更高?),你如何计算位置。

因此,查询可能会以下列方式查看:

SELECT count(1) as position
FROM table
WHERE
    rating > (SELECT rating FROM table WHERE id={user's ID});

答案 1 :(得分:1)

SELECT  COUNT(*) + 1
FROM    users
WHERE   (rating, name) <
        (
        SELECT  rating, name
        FROM    users
        WHERE   name = 'john'
        )

请注意,如果您在名称和评分上都有重复项,则此查询会为这两个分配相同的评分。

答案 2 :(得分:0)

在数据库文献中,表格更正式地称为relations - 它们不保证是有序的(它们是“元组”集合),所以你的问题没有意义。如果您需要依赖订单/位置,则需要定义一个额外的列(如自动递增ID列)来捕获和存储该信息。

答案 3 :(得分:0)

答案 4 :(得分:0)

抵消不起作用吗?

SELECT * FROM Table ORDER BY rating DESC LIMIT 1,6

这将返回已被6行设置的1行?或者我错了,语法将是

SELECT * FROM Table ORDER BY rating DESC LIMIT 1 , {{POS}}