目前在游戏桌中有以下信息
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')
答案 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查询语法中有一些技巧我缺少,但它完成了工作。