我试图通过使用总分数来获得学生的排名,也就是说,比其他学生分数高的学生应该是第一个等等,我使用while循环来做到这一点,但是当两个或更多的学生有相同的总分数时,他们得到不同的排名,我想实现的是当两个或更多的学生有相同的总分数时,他们应该有相同的排名,请帮助,这是我的代码。
<?php require_once("include/connection.php"); ?>
<?php
$query = "SELECT * FROM `total` ORDER BY `total` DESC";
$result = mysql_query($query) or die(mysql_error());
$rank = 1; // initialize
echo "<table><tr><th>Student Code</th><th>Rank</th><th>Total</th></tr>\n";
while($row = mysql_fetch_assoc($result))
{
echo "<tr><td>{$row['student_code']}</td><td>$rank</td><td>{$row['total']}</td></tr>\n";
if ($rank == 100)
{ break; }
$rank++;
}
echo "</table>\n";
?>
4条答案
按热度按时间mrwjdhj31#
保持当前代码,但在循环外添加一个变量,如下图所示,多一个变量以保持当前分数:
在循环中,检查总数是否与您保留的总数相同,如果不同,则将rank分配给当前rank:
始终显示$current_rank,只有当它与前一个不同时才会改变,并且在每次迭代结束时,也更新
$current_score
:我希望这能帮上忙。
utugiqy62#
你需要考虑学生的“总体”。
首先,如果你只想要100条记录,你可以在SQL中限制它,这将比循环100次迭代后的break更有效:
想一想,如果你有10,000名学生,你会白白收回9,900名学生。
然后,你的while循环可以这样修改:
使用此选项,只有当当前学生的排名低于他之前的学生时,您才会增加排名。如果你知道你的maxtotal值,你可以删除第一个检查,如果第一次设置了$lastToal。如果是,例如它是100,只需在$lastTotal = 100中设置它,并删除while循环中的第一个if。
vnzz0bqm3#
请使用
mysqli_*
函数mysql_*
函数现在很旧了zsohkypk4#
它非常简单,我用在查询[按标记描述顺序]和它的显示记录排名1到最后排名。很简单.