Php 如何检查球员是否在前10名(排名)

Php 如何检查球员是否在前10名(排名),php,mysql,Php,Mysql,我有一些玩家的分数被添加到表格中,我想在PHP中做一个检查,看看他们的分数是在前10名之内还是在前10名之外 我已经准备好了以下内容,现在需要在DESC中添加查询来排序highscore,并让我知道userid是否排在前10位 当前: $currentuser = $_SESSION['userid']; $mysqli = new mysqli($hostname, $db_username, $db_password,$db_name); if ($mysqli-&g

我有一些玩家的分数被添加到表格中,我想在PHP中做一个检查,看看他们的分数是在前10名之内还是在前10名之外

我已经准备好了以下内容,现在需要在
DESC
中添加查询来排序
highscore
,并让我知道
userid
是否排在前10位

当前:

    $currentuser = $_SESSION['userid'];
    $mysqli = new mysqli($hostname, $db_username, $db_password,$db_name);
    if ($mysqli->connect_error) {
        die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
    }   

    $res = $mysqli->query("SELECT * FROM players WHERE userid=" . $currentuser);
尝试:

    $currentuser = $_SESSION['userid'];
    $mysqli = new mysqli($hostname, $db_username, $db_password,$db_name);
    if ($mysqli->connect_error) {
        die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
    }   

    $current = $mysqli->query("SELECT * FROM players WHERE userid=" . $currentuser);
    $res = $mysqli->query("SELECT * FROM players ORDER BY highscore DESC LIMIT 10");

    foreach ($res as $player) {
       if ($player = $current) {
         echo "in the top 10" }
       else {
         echo "not in the top 10"} 
    }

这是否正确?检查
$currentuser
是否在前10名中,或者是否可以以更干净的方式实现,这是正确的逻辑吗?

您可以使用以下查询:

 $query="SELECT 1 from players WHERE  $currentuser in (SELECT userid FROM players ORDER BY highscore DESC LIMIT 10) LIMIT 1"
if($result=$mysqli->query($query))
{
if($result->num_rows >0 )echo 'in top 10';
else echo 'not in top 10';
}
else echo 'error';

假设您想列出所有用户,然后指出前10名中的用户,那么这里有一个选项,使用子查询将整个列表组合成一个查询,以获得前10名玩家、一个
case
语句和一个
外部联接

select p.userid, 
  case 
    when p2.userid is not null 
    then 'in the top 10'
    else 'not in the top 10'
  end intopten
from players p
  left join (select *
        from players
        order by highscore desc
        limit 10) p2 on p.userid = p2.userid

根据您的意见,这可能是最简单的选择:

select *
from (
  select *
  from players
  order by highscore desc
  limit 10
) t
where userid = 1

这是最基本的想法,您需要做的是获取结果Thank@Ghost,但是我可以按照上面的方法来做吗?或者我是否走错了方向,即:有没有更好的方法来做我正在尝试的事情?获取结果会和上面一样吗?谢谢@Ormoz,这是最干净的方法吗?使用
$result
?如果我是你,我会这样写谢谢你,很快会测试它:)它不应该在
的地方,“$currentuser.”在
中,即使在那时仍然回显“error”,我修改了它,更快,自己检查了它。它对我有用。(抱歉,缺少一个
else
)更重要的是,只需一个简单的PHP/MySQL查询,看看当前用户是否在前10名,而不是列出所有用户或执行任何连接:)@DT.DTDG——好的,我现在明白了。不需要任何
联接
,您只需要一个查询。这应该是你最好的选择。Ok看起来不错-这样就选择了用户,但是如何检查它是否排在前10名?