Php 我如何根据用户使用SQL获得的分数找到他们在排行榜上的位置?

Php 我如何根据用户使用SQL获得的分数找到他们在排行榜上的位置?,php,mysql,sql,Php,Mysql,Sql,在我的数据库中,我有一个配置文件表,其中包括以下列: Id,profilename,点,上次更新 用户可以多次进入配置文件表,对于排行榜,我使用max(lastupdated)列的值 下面我有SQL代码来尝试确定某人在排行榜上的位置,除了一个小问题外,它是有效的 SELECT COUNT( DISTINCT `profilename` ) FROM `profiletable` WHERE `points` >= integer 如果两个人的得分相同,那么他们在排行榜上的位置是相同

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

Id
profilename
上次更新

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

下面我有SQL代码来尝试确定某人在排行榜上的位置,除了一个小问题外,它是有效的

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's points时,我从count函数中得到一个返回值1,但当我为steve或alice运行SQL查询时,得到的不是2,而是3

我也尝试过使用逻辑
points>integer
,但是对于steve或alice,这会返回1


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

在where子句中使用大于,并将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
选择计数(p1.`profilename`)+1
来自“profiletable”p1
在p1上左连接`profiletable`p2。profilename=p2.profilename
p1.lastupdated integer和p2.profilename为空

创建列表时,使用MySQL返回列表,使用PHP对位置进行编号。关于您的查询,因为您有
其中的`points`>=300
,所以您得到3,因为john包括在计数中。还有史蒂夫和爱丽丝。