我有一个数据库表user_points
,其中包含用户的积分,并且我正在尝试根据积分计算排名。它对除具有1分的用户之外的所有用户都适用。
如果用户有1分,它的排名显示为0 ,但是它的排名应该显示为最后一个或最后一个数字,例如:12083等。
得分越高,排名也应该越高。例如:
1000分=等级1
1分=等级1223
以下是查询。
SELECT id, mobileNo, points,
FIND_IN_SET( points, (SELECT GROUP_CONCAT( points ORDER BY points DESC )
FROM users_points )) AS rank
FROM users_points
WHERE mobileNo = '03214701777'
我应该更改些什么来解决它?
答案 0 :(得分:3)
SELECT a.id, a.mobileNo, a.points,
IFNULL((SELECT COUNT(*) AS rank
FROM users_points b
WHERE b.points<a.points), 0)+1 as rank
FROM user_points a
WHERE a.mobileNo = '03214701777'
似乎就是您想要的。尽管效率仍然很低,但它比使用FIND_IN_SET()的方法要好。如果您确实想使用FIND_IN_SET(),则需要将分数填充到一致的宽度,然后除以width + 1以获得排名。