当他们的分数相等时,如何将排名分配给他们共享最高排名的学生?
Posted
技术标签:
【中文标题】当他们的分数相等时,如何将排名分配给他们共享最高排名的学生?【英文标题】:How to assign rank to students to where they share the highest rank when their scores equal? 【发布时间】:2017-12-01 22:38:49 【问题描述】:我有对学生进行排名的代码,它可以工作,但不是我想要的——如果两个或多个学生得分相同 score
它不会 rank
他们都在同一个 rank
。我希望最终的排名是这样的——如果两个或更多的学生score
相同的结果,我希望他们rank
在同一个地方像这样:
1. miki ==> 97.8
2. lisa ==> 96.1
2. jack ==> 96.1
4. john ==> 90.7
请注意 lisa 和 jack score
相同 (96.1
),并且它给了它们相同的 rank
(第二个),因此,第三个被跳过。约翰是第 4 名。
当前代码
$student = '10_E';
$first = mysql_query("SELECT * FROM rej_students where student_selected = '$student'");
$teacher = mysql_query("SELECT * FROM teachers WHERE tech_id = '1002'");
$teachers = mysql_fetch_array($teacher);
$avg = mysql_query("SELECT * FROM avgfct_10 order by AVGFCT_10 desc");
$ra = 0; //rank
while ($go = mysql_fetch_array($avg))
if ($go['AVGFCT_10'] != $go['AVGFCT_10'])
$micky = $ra ++;
if ($go['AVGFCT_10'] == $go['AVGFCT_10'])
$micky = 'same';
echo "id = " . $go['STUDENT_ID'] . "<br> AVARANGE = " . $go['AVGFCT_10'] . "<br>RANK = " . $micky . "<br> Class = " . $teachers['tech_hclass'] . "<br><br>";
【问题讨论】:
最好在此处包含代码,因为链接可能会被删除。另外,请阅读tour .. 这将比医疗保健账单更快地被否决(抱歉不得不这样做) - 按照@Naruto 的建议阅读游览,然后再试一次 :) 请阅读What topics can I ask about和How to ask a good question和the perfect question以及如何创建Minimal, Complete and Verifiable Example 请不要发布代码图片。将代码本身作为文本发布 每次在新代码中使用themysql_
数据库扩展this happens 时,它都已被弃用,并且已经存在多年,并且在 php7 中永远消失了。如果您只是学习 PHP,请花精力学习 PDO
或 mysqli
数据库扩展和预处理语句。 Start here
【参考方案1】:
你需要两个计数器
绝对计数器(始终为 1、2、3、4、5 等)。 排名计数器 - 从 1 开始计数,但如果分数相同,则不会更新。一旦分数不同,它就会更新为absolute counter
。
示例代码
$counter = 1; // init absolute counter
$rank = 1; // init rank counter
// initial "previous" score:
$prevScore = 0;
while ($go = mysql_fetch_array($avg))
// get "current" score
$score = $go['AVGFCT_10'];
if ($prevScore != $score) // if previous & current scores differ
$rank = $counter;
// else //same // do nothing
echo "Rank: $rank, Score: $score<br>";
$counter ++; // always increment absolute counter
//current score becomes previous score for next loop iteration
$prevScore = $score;
输出:
Rank: 1, Score: 97.8
Rank: 2, Score: 96.1
Rank: 2, Score: 96.1
Rank: 4, Score: 90.7
【讨论】:
以上是关于当他们的分数相等时,如何将排名分配给他们共享最高排名的学生?的主要内容,如果未能解决你的问题,请参考以下文章