【问题标题】:Ranking the same students in php在php中对相同的学生进行排名
【发布时间】:2017-10-14 13:50:20
【问题描述】:

你,

我正在做一些学校项目,我在这件事上堆积了我希望我能得到正确答案的事情是我试图对一个班级的学生进行排名并且它有效,但如果两个学生的成绩相同,它就不会给出他们相同的等级我希望它给他们相同的等级并跳到下一个等级并再次进入处理。

<?php $result = mysql_query("SELECT * FROM score ORDER BY AVERAGE");
$rank= 0; while($go = mysql_fetch_array($result)){$miki = ++$rank;
$sql = mysql_query("INSERT INTO rank(student_id,avg,rank) VALUES('$go['student_id']','$go['avg']','$miki')"); } ?>

它有效,它排名,但如果两个学生的平均成绩相同,则他们的排名不同。

【问题讨论】:

  • 是的,您似乎知道问题所在,那么您打算如何解决?
  • 首先,不要使用 mysqli 函数。它们是折旧的。使用 mysqli 或 PDO 函数。
  • 第二,'++$rank'不会增加$rank,你需要在字符串之外做。 mysql会将其视为(如果$rank为0)'++0'
  • 您必须使用一个新变量来保持当前平均值,以便您可以将其与下一个进行比较。

标签: php mysql


【解决方案1】:

你想缓存最近一次运行的平均值和排名,试试这个:

<?php $result = mysql_query("SELECT * FROM score ORDER BY AVERAGE");
$rank=0; 
$cache_average=null;
$cache_rank=0;

while($go = mysql_fetch_array($result)) {
    if($go['avg'] != $cache_average)
        $cache_rank = $rank;

    $sql = mysql_query("INSERT INTO rank(student_id,avg,rank) VALUES('$go['student_id']','$go['avg']','$cache_rank')"); 

    $cache_average = $go['avg'];
    $rank++;
} 
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多