我有一个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查询,它返回团队的信息+一个数字排名,表明如果我已经渲染了整个列表,它们将在列表中显示多远。
谢谢!
答案 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