Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.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 如何根据MySql服务器中的最高分数和最低分钟数计算排名_Php_Mysql_Sql - Fatal编程技术网

Php 如何根据MySql服务器中的最高分数和最低分钟数计算排名

Php 如何根据MySql服务器中的最高分数和最低分钟数计算排名,php,mysql,sql,Php,Mysql,Sql,我的桌子结构是 CREATE TABLE IF NOT EXISTS `tbl_user_result` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `ResultId`int(11), `PaperId` int(11) , `Title` varchar(45), `TotalQuestions` int(11) , `Attempt` int(11) , `Correct` int(11) , `Wrong

我的桌子结构是

CREATE TABLE IF NOT EXISTS `tbl_user_result` (
   `Id` int(11) NOT NULL AUTO_INCREMENT,
   `ResultId`int(11),
   `PaperId` int(11) ,
   `Title` varchar(45),
   `TotalQuestions` int(11) ,
   `Attempt` int(11) ,
   `Correct` int(11) ,
   `Wrong` int(11) ,
   `Score` int(45) ,
   `Minutes` int(11) ,
   `TimeSt` varchar(45) ,
   `UserEmail` varchar(45) ,
   `UserName` varchar(45) ,
  PRIMARY KEY (`Id`));
我尝试了以下SQL查询

SELECT 
    id,
    PaperId,
    Title,
    Score,
    Minutes,
    (SELECT 
            COUNT(*) + 1
        FROM
            tbl_user_result 
        WHERE
            Score > x.Score AND Minutes > x.Minutes) AS Rank
FROM
    `tbl_user_result` as x

最简单的方法是使用变量:

select r.*
from (select r.*, (@rn := @rn + 1) as rank
      from tbl_user_result r cross join (select @rn := 0) vars
      order by score desc, minutes asc
     ) r;
如果没有重复项,则此操作有效

我认为以下是您想要的查询版本:

SELECT id, PaperId, Title, Score, Minutes,
       (SELECT COUNT(*) + 1
        FROM tbl_user_result r2
        WHERE r2.Score > r.Score OR
              (r2.Score = r.Score AND r2.Minutes < r.Minutes)
       ) AS Rank
FROM  tbl_user_result r;

最简单的方法是使用变量:

select r.*
from (select r.*, (@rn := @rn + 1) as rank
      from tbl_user_result r cross join (select @rn := 0) vars
      order by score desc, minutes asc
     ) r;
如果没有重复项,则此操作有效

我认为以下是您想要的查询版本:

SELECT id, PaperId, Title, Score, Minutes,
       (SELECT COUNT(*) + 1
        FROM tbl_user_result r2
        WHERE r2.Score > r.Score OR
              (r2.Score = r.Score AND r2.Minutes < r.Minutes)
       ) AS Rank
FROM  tbl_user_result r;

怎么了?请更具体一点。我尝试给出错误的输出。如果我修改Where子句,使其得分>x。这将仅基于分数给出结果,有什么不对?请更具体一点。我尝试给出错误的输出。如果我将Where子句修改为Score>x.Score,则只根据Score给出结果显示错误的语法:使用near'作为来自tbl_user_result r'的秩的语法缺少括号中的Hey。works Rate,非常感谢您的专家显示错误的语法:使用near'作为tbl_user_result r'排名的语法缺少括号中的Hey。工作炉篦,非常感谢专家