Php 获取特定条目的行号

Php 获取特定条目的行号,php,mysql,Php,Mysql,我有一个叫做排行榜的表格,有两列,PlayerName和PlayerRating。我希望能够访问一个特定的玩家名称,获得他们的游戏规则,以及他们的排名(例如:他们是第一、第二、第十吗?)。我读了一些书,确实找到了一种方法,但我似乎无法将其转换为PHP并实际打印出值。请记住,我对MySQLi或PHP不是很有经验 我目前正在通过以下方式获得我的PlayerRating: $CurrentRating = $Connection->query("SELECT CurrentRating FROM

我有一个叫做排行榜的表格,有两列,PlayerName和PlayerRating。我希望能够访问一个特定的玩家名称,获得他们的游戏规则,以及他们的排名(例如:他们是第一、第二、第十吗?)。我读了一些书,确实找到了一种方法,但我似乎无法将其转换为PHP并实际打印出值。请记住,我对MySQLi或PHP不是很有经验

我目前正在通过以下方式获得我的PlayerRating:

$CurrentRating = $Connection->query("SELECT CurrentRating FROM Leaderboard WHERE PlayerName='$PlayerName'")->fetch_assoc()["CurrentRating"];
我只能
回显$CurrentRating和工作完成。现在,为了找到PlayerRank,我找到了几个帖子,解释了我的查询应该如何进行

SET @rank=0; SELECT @rank:=@rank+1 As rank
因此,我认为开始是:

query("SET @rank=0; SELECT @rank:=@rank+1 As rank, CurrentRating FROM Leaderboard [...]
但我似乎无法让它正常工作,也无法获得适当的排名。我尝试回显了
$CurrentRating[“rank”]
和以下几个变体:

$CurrentRank = $Connection->query("SET @rank=0; SELECT @rank:=@rank+1 As rank, SELECT CurrentRating FROM Leaderboard WHERE PlayerName='$PlayerName'")->fetch_assoc()["rank"];
有人能帮我把这个写对吗? 提前谢谢

SELECT COUNT(*) FROM Leaderboard WHERE CurrentRating > ?
对于用户来说,电流额定值作为一个参数应该已经足够了


对于用户,当前评级作为一个参数应该差不多足够了

当您希望根据当前评级进行排名时,您的查询应该是这样的

查询

    SELECT 
       Leaderboard.PlayerName
     , Leaderboard.PlayerRating
     , (@rank := @rank + 1) AS rank
    FROM 
     Leaderboard
    CROSS JOIN(
      SELECT 
       @rank := 0
    )
      AS
        init_user_variable 
    ORDER BY 
     Leaderboard.CurrentRating DESC
     SELECT 
       Leaderboard_ranked.PlayerName
     , Leaderboard_ranked.PlayerRating
     , Leaderboard_ranked.rank 
    FROM (

        SELECT 
           Leaderboard.PlayerName
         , Leaderboard.PlayerRating
         , (@rank := @rank + 1) AS rank
        FROM 
         Leaderboard
        CROSS JOIN(
          SELECT 
           @rank := 0
        )
          AS
            init_user_variable 
        ORDER BY 
         Leaderboard.CurrentRating DESC

    ) 
      AS 
       Leaderboard_ranked
    WHERE
     Leaderboard_ranked.PlayerName = 'playername'
当您想要使用where过滤器进行排名时,您应该在如下所示的已传递表中使用此查询

查询

    SELECT 
       Leaderboard.PlayerName
     , Leaderboard.PlayerRating
     , (@rank := @rank + 1) AS rank
    FROM 
     Leaderboard
    CROSS JOIN(
      SELECT 
       @rank := 0
    )
      AS
        init_user_variable 
    ORDER BY 
     Leaderboard.CurrentRating DESC
     SELECT 
       Leaderboard_ranked.PlayerName
     , Leaderboard_ranked.PlayerRating
     , Leaderboard_ranked.rank 
    FROM (

        SELECT 
           Leaderboard.PlayerName
         , Leaderboard.PlayerRating
         , (@rank := @rank + 1) AS rank
        FROM 
         Leaderboard
        CROSS JOIN(
          SELECT 
           @rank := 0
        )
          AS
            init_user_variable 
        ORDER BY 
         Leaderboard.CurrentRating DESC

    ) 
      AS 
       Leaderboard_ranked
    WHERE
     Leaderboard_ranked.PlayerName = 'playername'
PHP MySQLi语法

$connection = mysqli_connect("host/ip", "user", "password", "database");
$result = mysqli_query($connection, [query]);
while($row = mysqli_fetch_array($result)) {
  echo $row['PlayerName'] . " " . $row['PlayerRating'] . " " . $row['rank'] "<br />" 
}
$connection=mysqli_connect(“主机/ip”、“用户”、“密码”、“数据库”);
$result=mysqli_query($connection,[query]);
while($row=mysqli\u fetch\u数组($result)){
echo$row['PlayerName']。.$row['PlayerRating']。.$row['rank']。
}
当您希望根据当前评级进行排名时,您的查询应该类似于以下内容

查询

    SELECT 
       Leaderboard.PlayerName
     , Leaderboard.PlayerRating
     , (@rank := @rank + 1) AS rank
    FROM 
     Leaderboard
    CROSS JOIN(
      SELECT 
       @rank := 0
    )
      AS
        init_user_variable 
    ORDER BY 
     Leaderboard.CurrentRating DESC
     SELECT 
       Leaderboard_ranked.PlayerName
     , Leaderboard_ranked.PlayerRating
     , Leaderboard_ranked.rank 
    FROM (

        SELECT 
           Leaderboard.PlayerName
         , Leaderboard.PlayerRating
         , (@rank := @rank + 1) AS rank
        FROM 
         Leaderboard
        CROSS JOIN(
          SELECT 
           @rank := 0
        )
          AS
            init_user_variable 
        ORDER BY 
         Leaderboard.CurrentRating DESC

    ) 
      AS 
       Leaderboard_ranked
    WHERE
     Leaderboard_ranked.PlayerName = 'playername'
当您想要使用where过滤器进行排名时,您应该在如下所示的已传递表中使用此查询

查询

    SELECT 
       Leaderboard.PlayerName
     , Leaderboard.PlayerRating
     , (@rank := @rank + 1) AS rank
    FROM 
     Leaderboard
    CROSS JOIN(
      SELECT 
       @rank := 0
    )
      AS
        init_user_variable 
    ORDER BY 
     Leaderboard.CurrentRating DESC
     SELECT 
       Leaderboard_ranked.PlayerName
     , Leaderboard_ranked.PlayerRating
     , Leaderboard_ranked.rank 
    FROM (

        SELECT 
           Leaderboard.PlayerName
         , Leaderboard.PlayerRating
         , (@rank := @rank + 1) AS rank
        FROM 
         Leaderboard
        CROSS JOIN(
          SELECT 
           @rank := 0
        )
          AS
            init_user_variable 
        ORDER BY 
         Leaderboard.CurrentRating DESC

    ) 
      AS 
       Leaderboard_ranked
    WHERE
     Leaderboard_ranked.PlayerName = 'playername'
PHP MySQLi语法

$connection = mysqli_connect("host/ip", "user", "password", "database");
$result = mysqli_query($connection, [query]);
while($row = mysqli_fetch_array($result)) {
  echo $row['PlayerName'] . " " . $row['PlayerRating'] . " " . $row['rank'] "<br />" 
}
$connection=mysqli_connect(“主机/ip”、“用户”、“密码”、“数据库”);
$result=mysqli_query($connection,[query]);
while($row=mysqli\u fetch\u数组($result)){
echo$row['PlayerName']。.$row['PlayerRating']。.$row['rank']。
}
您是否尝试对$CurrentRank变量进行var_dump()处理,以查看其中是否存储了数据?您是否只需要查看他们的等级和名称?正如我所提到的,我已经可以正确显示他们的名称和等级,我只需要显示他们的等级。如果这是一个令人困惑的部分,你可以将评级视为一个分数。我没有尝试过var_dump(),但是我不确定我尝试过的许多变量中的哪些应该应用它。你能写完整的东西让我测试一下吗?谢谢
mysqli\u query()
无法一次运行多个查询。您是否尝试对$CurrentRank变量进行var\u dump(),以查看数据是否存储在其中?您是否只需要查看它们的评级和名称?正如我提到的,我已经可以正确显示它们的名称和评级,我只需要显示它们的评级。如果这是一个令人困惑的部分,你可以将评级视为一个分数。我没有尝试过var_dump(),但是我不确定我尝试过的许多变量中的哪些应该应用它。你能写完整的东西让我测试一下吗?谢谢
mysqli\u query()
无法同时运行多个查询。感谢您的回答!你能帮我打印“排名”值吗?正确的PHP语法是什么?@stefanplc用一个PHP MySQLi连接/查询示例更新了我的答案。非常感谢!谢谢你的回答!你能帮我打印“排名”值吗?正确的PHP语法是什么?@stefanplc用一个PHP MySQLi连接/查询示例更新了我的答案。非常感谢!谢谢我要试试这个!这太棒了!我的语法是这样的:
$CurrentRating=$Connection->query(“从排行榜中选择COUNT(*),其中CurrentRating>'1250'))->fetch_assoc()[“COUNT(*)”]其中“1250”将通过变量动态替换。即使我有5000名玩家,并且运行这个查询的人排名4500,这个方法还能正常工作吗?我担心如果我有太多的球员,比赛可能会太慢或者类似的事情。再次感谢!谢谢我要试试这个!这太棒了!我的语法是这样的:
$CurrentRating=$Connection->query(“从排行榜中选择COUNT(*),其中CurrentRating>'1250'))->fetch_assoc()[“COUNT(*)”]其中“1250”将通过变量动态替换。即使我有5000名玩家,并且运行这个查询的人排名4500,这个方法还能正常工作吗?我担心如果我有太多的球员,比赛可能会太慢或者类似的事情。再次感谢!