我只是想知道是否有任何有效的方法来收集基于积分的某些id的当前排名。
我唯一的想法就是抓住整点,然后检查每条记录是否多于或少。这样的事情。
Select * from whatever table
$x=0
while($row = mysql_fetch_array($result) {
if ($user == $row['user']) {
echo "$user is rank $x out of " . count($result);
break;
}
else {
$x++
}
}
答案 0 :(得分:1)
您可以使用变量,如here所示:
SET @rank=0;
SELECT user.*, @rank:=@rank+1 AS 'rank'
FROM user
ORDER BY score DESC
答案 1 :(得分:0)
你的意思是像mysql中的“MAX”吗?
“SELECT max(score)as records FROM users”;
这将从users表中检索得分最高的列。
答案 2 :(得分:0)
这可以在mysql中完成:
SELECT ui2.*,
(
SELECT COUNT(*)
FROM users ui
WHERE (ui.points, ui.id) >= (ui2.points, ui2.id)
) AS rank
FROM users ui2
WHERE id = @id
答案 3 :(得分:0)
是的,您可以使用max()和group by子句根据特定条件对结果进行分组。
“按照user_id,game_id”;
将SELECT max(得分)记录为FROM users_points group答案 4 :(得分:0)
drop table if exists users;
create table users
(
id int unsigned not null auto_increment primary key,
score int unsigned not null default 0
)
engine=innodb;
insert into users (score) values (10),(30),(50),(30),(20),(45),(20);
select
@r:=@r+1 as rank,
u.id,
u.score
from
users u
inner join (select @r:=0) as r
order by
u.score desc;