查询在游戏数据库中查找用户排名

时间:2013-04-17 21:27:45

标签: php mysql sql database

目前在游戏桌中有以下信息

ID       Name       XP
1        Bob        11
2        Jim        120
3        Dan        56
4        Oli        32

我想在拉动单个用户时找到排名。我希望能够成为Jim' Jim'作为排名1和鲍勃'例如,排名第4位。

我有这个查询,但似乎很乱。

SELECT COUNT(*)+2 FROM game WHERE xp > (SELECT xp FROM game WHERE id = '$id')

2 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

SELECT g1.id, COUNT(DISTINCT g2.XP)+1 rank
FROM
  game g1 LEFT JOIN game g2
  ON g1.XP < g2.XP
GROUP BY
  g1.id

小提琴here。您可以使用DISTINCT,也可以不使用,具体取决于您的目标。

答案 1 :(得分:0)

您可能希望填充数组以找到他们的&#34; rank&#34;。如果你只想要最高:

"SELECT * FROM game WHERE xp = MAX(xp)"

如果你想要一个按xp排名的表格,我会建议用数据填充一个数组,这样你就可以用xp对它进行排序,然后相应地提供它。我在脚本中也使用$ db类,但它应该有意义:

while($data = $db->sql_query("SELECT * FROM games ORDER BY xp DESC"){
    $rank++;
    $users[]['name'] = $data['name'];
    $users[]['xp'] = $data['xp'];
    $users[]['rank'] = $rank;
}

echo '<table><tr><td>Rank</td><td>Name</td><td>XP</td></tr>';

foreach($users as $user){
     echo'<tr><td>'.$user['rank'].'</td><td>'.$user['name'].'</td><td>'.$user['xp'].'</td></tr>';
}

echo '</table>';

根据我的经验,如果只填充数组,处理信息总是更容易。可能在sql查询语法中有一些技巧我缺少,但它完成了工作。