如何根据用户使用SQL的点数找到用户的排行榜位置?

时间:2018-02-10 09:25:08

标签: php mysql sql

在我的数据库中,我有一个配置文件表,其中包含以下列:

Idprofilenamepointslastupdated

可以多次将用户放入配置文件表中,对于排行榜,我使用max(lastupdated)列的值。

下面我有SQL代码来尝试确定某人的排行榜位置,除1个小问题外,它的工作原理。

SELECT COUNT( DISTINCT  `profilename` )
FROM  `profiletable`
WHERE  `points` >= integer

如果两个人拥有相同的积分,那么他们拥有相同的排行榜位置,但这会使计数功能以我不想要的方式运作。

例如:

position 1: profilename john points 500
position 2: profilename steve points 300
position 2: profilename alice points 300
position 4: profilename ben points 200

当我运行SQL查询并将Integer设置为john的点时,我从count函数得到一个返回值1,但是当我运行steve或alice的SQL查询时,而不是得到2,我得到3。

我也尝试过使用逻辑points > integer,但这会为史蒂夫或爱丽丝返回1。

如何修改SQL查询以便计数返回正确的排行榜位置?

1 个答案:

答案 0 :(得分:1)

使用大于where子句的大于1并向计数添加1:

SELECT COUNT( DISTINCT  `profilename` ) + 1
FROM  `profiletable`
WHERE  `points` > integer

更新

如果您还需要进入更新的时间字段,那么首先需要获取与上次更新时间相关的记录:

SELECT COUNT(p1.`profilename` ) + 1
FROM  `profiletable` p1
LEFT JOIN `profiletable` p2 ON p1.profilename=p2.profilename
    and p1.lastupdated<p2.lastupdated
WHERE  p1.`points` > integer and p2.profilename is null