1

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

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

例如,我想在拉单个用户时找到排名。例如,我希望能够将“Jim”拉为 1 号,将“Bob”拉为 4 号。

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

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

2 回答 2

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

在这里拉小提琴。您可以使用 DISTINCT 或不使用,这取决于您所追求的。

于 2013-04-17T21:32:26.887 回答
0

您可能想要填充一个数组以查找他们的“排名”。如果你只是想要最高的:

"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 查询语法中的一些技巧,但它可以完成工作。

于 2013-04-17T21:53:16.430 回答