MySQL高分查询

时间:2012-02-24 07:41:25

标签: php mysql

  

可能重复:
  mySQL “Rank in Highscore”-Query

我只是想知道是否有任何有效的方法来收集基于积分的某些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++
     }
}

5 个答案:

答案 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;