【问题标题】:Ranking PHP MYSQL Using while loop使用while循环对PHP MYSQL进行排名
【发布时间】:2015-10-11 15:56:10
【问题描述】:

我有问题。我正在根据申请人的考试成绩制定排名系统。代码如下:

$testScore = "SELECT Overall_Score, First_Name
                      FROM applicant_details, person, person_details
                      where person.ID_No like person_details.ID_No and Position_Applied = 'Work137' and Person_Type = 'Applicant' and applicant_details.ID_No like person.ID_No";

$result = mysql_query($testScore);

$rank = 0;
$lastScore = false;
$rows = 0;

while( $row = mysql_fetch_array( $result ) ){               

       $name = $row['First_Name'];
       $overall = $row['Overall_Score'];
       $rows++;

       if( $lastScore != $overall){
           $lastScore = $overall;
           $rank = $rows;
        }
        echo"Name:$name rank:$rank score: $overall </br>";
}

此代码的输出是第一个被查询的人是数字1。示例输出:

姓名:犹他州排名:1 得分:85

姓名:立夏等级:2 得分:90

我想要一个输出:

姓名:犹他州排名:2 得分:85

姓名:立夏等级1得分:90

【问题讨论】:

  • 修复您的查询以使用正确的join 语法并在表之间使用正确的连接条件。

标签: php mysql


【解决方案1】:

只需使用 ORDER BY [列名排序] [DESC/ASC] 按值排序...

SELECT Overall_Score, First_Name
                  FROM applicant_details, person, person_details
                  where person.ID_No like person_details.ID_No and Position_Applied = 'Work137' and Person_Type = 'Applicant' and applicant_details.ID_No like person.ID_No ORDER BY Overall_Score DESC

如果你想保持顺序,那么应该使用 mysql_num_rows() 来获取答案的总数,并使用该数字对它们进行排名:

$rows = mysql_num_rows($result);
while( $row = mysql_fetch_array( $result ) ){               

   $name = $row['First_Name'];
   $overall = $row['Overall_Score'];

   if( $lastScore != $overall){
       $lastScore = $overall;
       $rank = $rows;
    }
    echo"Name:$name rank:$rank score: $overall </br>";
   $rows--;

}

【讨论】:

  • 从来不知道解决方案非常简单。谢谢!
【解决方案2】:

您的查询中需要一个 ORDER BY 子句:

$testScore = "SELECT Overall_Score, First_Name
              FROM applicant_details, person, person_details
              WHERE person.ID_No like person_details.ID_No
              AND Position_Applied = 'Work137'
              AND Person_Type = 'Applicant'
              AND applicant_details.ID_No like person.ID_No
              ORDER BY Overall_Score DESC
";

正如 Gordon Linoff 所暗示的,您可以通过使用正确的 JOIN 语法来改进此查询:

$testScore = "SELECT Overall_Score, First_Name
              FROM applicant_details
              JOIN person ON applicant_details.ID_No like person.ID_No
              JOIN person_details ON person.ID_No like person_details.ID_No
              WHERE Position_Applied = 'Work137'
              AND Person_Type = 'Applicant'
              ORDER BY Overall_Score DESC
";

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 2013-04-10
    • 2011-11-30
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多