Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在游戏数据库中查找用户排名的查询_Php_Mysql_Sql_Database - Fatal编程技术网

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

Php 在游戏数据库中查找用户排名的查询,php,mysql,sql,database,Php,Mysql,Sql,Database,目前在游戏表中有以下信息 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 FR

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

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')

您可以使用以下内容:

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
选择g1.id,计数(不同的g2.XP)+1秩
从…起
游戏g1左加入游戏g2
关于g1.XP

小提琴。您可以使用DISTINCT或not,具体取决于您的目标。

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

"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>';
while($data=$db->sql\u query(“按xp DESC从游戏订单中选择*){
$rank++;
$users[]['name']=$data['name'];
$users[]['xp']=$data['xp'];
$users[]['rank']=$rank;
}
回声“RankNameXP”;
foreach($users作为$user){
回显'.$user['rank'].'.$user['name'].'.'..$user['xp'].';
}
回声';

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

你的查询似乎是正确的,但为什么
+2
而不是
+1
?这是正确的答案。你会想要XP上的索引。我犯了一个愚蠢的错误e-这很好用,我能接受的时候就会接受:)确保你能接受他的答案,这样其他找到这个条目的人就会知道它起作用了。