使用多个MySQL查询和PHP获取行位置

使用多个MySQL查询和PHP获取行位置,php,mysql,Php,Mysql,我有一个如下所示的MySQL表: id | player | game 1 | game 2 | game 3 -------------------------------------- 1 | Joe | 345 | 34 | 64 2 | Mark | 12 | 256 | 35 3 | Dan | 156 | 134 | 122 该表有大约20K个条目。 “游戏1”、“游戏2”、“游戏3”列包含每个游戏的玩家点数 我

我有一个如下所示的MySQL表:

id | player | game 1 | game 2 | game 3
--------------------------------------
1  | Joe    | 345    | 34     | 64    
2  | Mark   | 12     | 256    | 35
3  | Dan    | 156    | 134    | 122
该表有大约20K个条目。 “游戏1”、“游戏2”、“游戏3”列包含每个游戏的玩家点数

我需要为每个玩家创建一个页面,显示他们在游戏1、游戏2、游戏3中的排名位置。全部在一页中

首先,我不知道如何获得用户的排名位置。。。例如,如果我想为第1场比赛输出Joe的排名,当然我可以执行ORDERBY“game 1”,但是如何获得Joe的排名呢

第二:是否可以在一次查询中获得Joe在第1场、第2场和第3场比赛中的排名,或者我必须进行3次单独的查询


谢谢你的帮助,非常感谢

首先,您需要在其中添加一个ID列,该列在每次添加玩家时自动递增。然后根据用户的id提取行

使用PDO

//Set your user Id somehow.. Maybe from a session or from your URL
$userId = trim(strip_tags($_GET['userId']));

//Then query your db and order by game 1 descending from highest score down to 0

$user_sth = $dbh->prepare("SELECT player, game 1, game 2, game 3 FROM players ORDER BY game 1 DESC")
$user_sth->execute();

//start the rank at 1
$rank = 1;

//create a variable to store our results in
$results = '';

//fetch the result array
while($user = $user_sth->fetch(PDO::FETCH_ASSOC){
    //maybe put it into a table row
    $results .= '<tr><td>'.$rank.'</td><td>'.$user['player'].'</td><td>'.$user['game 1'].'</td></tr>';

    //update our rank position number
    $rank++;
}
//以某种方式设置您的用户Id。。可能来自会话或您的URL
$userId=trim(strip_标记($_GET['userId']);
//然后按游戏1从最高分数下降到0查询数据库和顺序
$user_sth=$dbh->prepare(“按游戏1描述从玩家顺序中选择玩家、游戏1、游戏2、游戏3”)
$user_sth->execute();
//从1开始排名
$rank=1;
//创建一个变量来存储结果
$results='';
//获取结果数组
而($user=$user\u sth->fetch(PDO::fetch\u ASSOC){
//也许把它放在桌子的一排
$results.=''.$rank.'.$user['player'.'.'.'.$user['game 1'.'.';
//更新我们的排名
$rank++;
}

现在,您可以在html中的某个位置回显$results了。首先,您需要在其中添加一个ID列,该列在每次添加播放机时自动递增。然后根据用户的ID提取行

使用PDO

//Set your user Id somehow.. Maybe from a session or from your URL
$userId = trim(strip_tags($_GET['userId']));

//Then query your db and order by game 1 descending from highest score down to 0

$user_sth = $dbh->prepare("SELECT player, game 1, game 2, game 3 FROM players ORDER BY game 1 DESC")
$user_sth->execute();

//start the rank at 1
$rank = 1;

//create a variable to store our results in
$results = '';

//fetch the result array
while($user = $user_sth->fetch(PDO::FETCH_ASSOC){
    //maybe put it into a table row
    $results .= '<tr><td>'.$rank.'</td><td>'.$user['player'].'</td><td>'.$user['game 1'].'</td></tr>';

    //update our rank position number
    $rank++;
}
//以某种方式设置用户Id..可能来自会话或URL
$userId=trim(strip_标记($_GET['userId']);
//然后按游戏1从最高分数下降到0查询数据库和顺序
$user_sth=$dbh->prepare(“按游戏1描述从玩家顺序中选择玩家、游戏1、游戏2、游戏3”)
$user_sth->execute();
//从1开始排名
$rank=1;
//创建一个变量来存储结果
$results='';
//获取结果数组
而($user=$user\u sth->fetch(PDO::fetch\u ASSOC){
//也许把它放在桌子的一排
$results.=''.$rank.'.$user['player'.'.'.'.$user['game 1'.'.';
//更新我们的排名
$rank++;
}

现在,您可以在html中的某个地方回显$results

“但是如何获得Joe的排名”
-请查看
WHERE
关键字。类似于:
从MyTable WHERE player='Joe'
(顺便说一句,由于您正在识别单个记录,因此不需要使用
ORDER by
ORDER BY
与这个问题有什么关系?看起来你想要的信息只是在每一行中。
“但是我如何获得乔的排名”
-看看
WHERE
关键字。类似于:
SELECT*FROM MyTable WHERE player='Joe'
(顺便说一句,这将排除对订单的任何需要,因为您正在识别单个记录。)
ORDER BY
与这个问题有什么关系?看起来你想要的信息只是在每一行中。如果
player
已经识别了记录,那么ID列就不完全是必需的。@David true,我只是认为如果他不强制使用唯一的播放器名称可能是个好主意是的,我有唯一的ID,我在我的表格中省略了e、 我读了你的答案,看起来很好,你给我展示了一个OO查询的好技巧,但我认为它将输出游戏1、游戏2、游戏3列的内容。可能我在描述中不清楚:这些列的内容是玩家点数:我需要命令他们获得该位置。这是我的问题。@marcello,请查看我的编辑并让我回答我知道这是否是您要找的。如果
player
已经识别了记录,则ID列不是完全必要的。@David true,我只是认为如果他不强制使用唯一的播放器名称可能是个好主意是的,我有唯一的ID,我在我的表中省略了。我读了您的答案,看起来很好,您给我展示了一个OO q的好技巧但我想它会输出游戏1、游戏2、游戏3栏的内容。可能我在描述中不清楚:这些栏的内容是玩家点数:我需要命令他们获得该位置。这是我的问题。@marcello,请查看我的编辑,让我知道您是否在寻找这些内容。