从MySQL的评级字段中查找排名

时间:2012-02-24 05:07:31

标签: php mysql

我有一个MySQL表,如下所示:

id (int primary)
name  (text)
rating (float)

我有一个显示排名的页面,如下所示:

$i = 0;
$q = mysql_query("SELECT * FROM teams ORDER BY rating DESC");
while($r = mysql_fetch_assoc($q)){
    $i++;
    print("$i: {$r['name']}<br>");
}

这显示团队按其评级顺序排列。它有效。

现在,如果我获得了团队的ID,我如何找到他们的排名而不会像这样经历循环?一个MySQL查询,它返回团队的信息+一个数字排名,表明如果我已经渲染了整个列表,它们将在列表中显示多远。

谢谢!

2 个答案:

答案 0 :(得分:1)

要获得排名,您可以这样做:

SELECT COUNT(*) as ranking
FROM teams t
WHERE t.rating >= (SELECT rating FROM teams WHERE id=$ID);

要获得所有相关信息,您可以:

SELECT t.*,COUNT(*) as rank
FROM teams t
JOIN teams t2 ON t.rating<=t2.rating
WHERE t.id=4;

这会加入teams加入t.rating <= t2.rating,因此每个评分高于或等于你的团队都会获得一行。

COUNT只计算有多少球队的评分高于或等于你。

请注意,如果有平局,这将给你较低的排名。如果您想要最高,可以将<=更改为<

答案 1 :(得分:0)

你也可以这样做:

select * from (
  select t.*, @rank := @rank + 1 as rank
  from (select @rank := 0) as r, t
  order by rating desc
) as t
where id = 20