2012-01-05 40 views
2

我在MySQL中创建了一个高分表。在MySQL中计数行(高分)

我有一个“我的分数”按钮需要检索的用户评分,如:

10. John 395 

42. John 340 

90. John 10 

我应该如何走出去检索用户的每个分数的排名(第10,第42,第90) ? 我可以从数据库中提取所有得分并遍历它们,但这似乎不是一个好的解决方案。

让我试着展开: 我从数据库中检索所有MY分数。例如。 10分。我想显示这10个分数,但是我不知道这些分数的排名与我的数据库中的其他分数相比较! (10日,16日等)..Hope更有意义......

感谢

+1

表格的结构是什么?你试过什么了?中国茶的价格是多少? – Neal 2012-01-05 14:05:34

+0

查找MySQL关键字ORDER BY和LIMIT – 2012-01-05 14:06:04

回答

1

对于在总榜单您可能需要您希望这个概述每次要建立一个列表中的位置,或者使用存储过程为给定时刻构建列表。您可以在给定的时间间隔内“缓存”列表。或者,也许更新列表时,有人玩了一个游戏,会改变前100名。

正如@WhiteElephant建议,你会在每次你想要的数据制作表。 @stefandoorn建议不使用sql的优化计数,我认为这对于这些计算不够有效。

1

一个简单的SQL查询会为你做它。例如,如果你想在10日的分数,你可以使用:

SELECT name, score FROM highscores ORDER BY score DESC LIMIT 1 OFFSET 9 

的将始终位置偏移要求 - 1.

如果你想有关联的军衔为得分旁边一列,您可以执行以下操作:

SELECT @rownum:[email protected]+1 position, name, score FROM (SELECT @rownum:=0) r, highscores ORDER BY score DESC 

这不适用于偏移量(位置号总是从1开始)。其结果将是类似以下内容:

+----------+-------------+-------+ 
| position | name  | score | 
+----------+-------------+-------+ 
|  1 | Player 1 | 27681 | 
|  2 | Player 2 | 14982 | 
+----------+-------------+-------+ 

但我认为最好的办法是只通过返回值循环与索引,并使用该指数跟踪的位置。

+0

问题是没有检索数据,我可以检索它,但是一旦我这样做了,我不知道哪个等级属于哪个分数! – user1124382 2012-01-05 14:10:48

+0

让我试着展开: 我从数据库中检索所有MY分数。例如。 10分。我想显示这10个分数,但是我不知道这些分数的排名与我的数据库中的其他分数相比较! (10日,16日等)..希望更有意义... – user1124382 2012-01-05 14:12:42

+0

如果你想排名,请看http://thinkdiff.net/mysql/how-to-get-rank-using-mysql-query/ – 2012-01-05 14:14:16

-1

只需使用ORDER BY得分DESC即可在查询结果中按相反顺序(从高到低)排序。当PHP迭代,并显示它您可以使用一个计数:

查询例如:SELECT * FROM scores ORDER BY score DESC

$count = 1; 
$sql = 'SELECT * FROM scores ORDER BY score DESC'; 
$result = mysql_query($sql) or die(mysql_error()); 
while($fetch = mysql_fetch_object($result)) { 
    echo $count . ' ' . $fetch->score . '<br />'; 
    $count++; 
} 
+0

这就是他说的他不想做的事 – MrGlass 2012-01-05 14:12:30

1
SELECT 
    id, name, score,(select count(*) FROM highscores AS higherscores WHERE higherscores.score>currentscores.score)+1 AS rank 
FROM 
    highscores AS currentscores 
WHERE name="john" 
; 
+0

+1避免明确地对每个分数进行排名,然后对其进行筛选。值得注意的是,例如,记录可能会“和”第二名。 (此外,这可以等效地用JOIN构造表示。) – pilcrow 2012-01-07 17:39:55