我有一个数据库,其中包含我创建的游戏的用户分数。我正在尝试添加一项功能,向用户显示他们当前的排名。
我需要一个查询,它将按分数DESC对行进行排序,然后找到用户分数并按用户名获得他/她的排名。
我知道这是一个非常简单的查询,但我的想法现在还不能正常工作。
CREATE TABLE HighScores(
id int(11) NOT NULL auto_increment
,deviceID varchar(100) NOT NULL
,username varchar(50) NOT NULL
,score varchar(10) NOT NULL
,game int(2) NOT NULL
,spins int(10) NOT NULL
,PRIMARY KEY (id)
);
答案 0 :(得分:1)
假设这样的表结构:
create table users(
user_id
,score int
,primary key(user_id)
);
您可以通过计算得分较低的用户数来计算用户的排名。
select user_id
,score
,(select count(*) + 1 from users x where u.score < x.score) as rank
from users u
where u.user_id = ?
答案 1 :(得分:1)
由于我不知道您的表结构,因此很难提出查询。
This article完全符合您的要求。
示例查询:
select @rownum:=@rownum+1 ‘rank’, p.* from player p, (SELECT @rownum:=0) r order by score desc limit 10;
魔法在变量rownum中,这是一个为每一行增加的变量。
答案 2 :(得分:0)
SET @rank:= 0;
SELECT rank, score FROM (
SELECT @rank:= @rank + 1 AS rank, id, score
FROM scores ORDER BY score DESC
) as result WHERE id=xxx;
答案 3 :(得分:0)
SET @rank=0;
SELECT username, rank
FROM (
SELECT username, @rank:=@rank+1 AS rank
FROM HighScores
ORDER BY score DESC
) AS t
WHERE username = :username