Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 获得学生军衔_Php - Fatal编程技术网

Php 获得学生军衔

Php 获得学生军衔,php,Php,我试图通过总分来获得学生的排名,即得分高于其他学生的学生应该是第一名,依此类推,我使用while循环来实现,但是当两个或两个以上的学生的总分相同时,他们会得到不同的排名,我想实现的是当两个或两个以上的学生有相同的总分,他们应该有相同的排名,请帮助,这是我的代码 <?php require_once("include/connection.php"); ?> <?php $query = "SELECT * FROM `total` ORDER BY `total` DESC";

我试图通过总分来获得学生的排名,即得分高于其他学生的学生应该是第一名,依此类推,我使用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";  
?>


保留当前代码,但在循环外添加一个变量,如下面所示,再添加一个变量以保持当前分数:

$current_rank = 1;
$current_score = null;
在循环内部,检查总数是否与您保留的总数相同,以及是否不同,然后将等级分配给当前等级:

if ($current_score != $row['total'])
{
    $current_rank = $rank;
}
始终显示$current_排名,只有当它与上一个不同时才会更改,并且在每次迭代结束时,也更新
$current_得分

$current_score = $row['total'];
我希望这有帮助。

< P>你需要考虑学生的“总”。

首先,如果您只需要100条记录,可以在SQL中对其进行限制,这将比循环100次迭代后的中断更有效:

$query = "SELECT * FROM `total` ORDER BY `total` DESC LIMIT 100";
想象一下,如果你有10000名学生,你将免费获得9900名学生

然后,您的while循环可以如下更改:

$rank = 1;
$lastTotal = 0;
while($row = mysql_fetch_assoc($result)) 
{ 
    echo "<tr><td>{$row['student_code']}</td><td>$rank</td><td>{$row['total']}</td></tr>\n"; 
    if ($lastTotal == 0) {
        $lastTotal = $row['total']; // First time that $lastTotal is set.
    }
    if ($lastTotal > $row['total']) {
        $lastTotal = $row['total'];
        $rank++;
    }
}
$rank=1;
$lastTotal=0;
while($row=mysql\u fetch\u assoc($result))
{ 
echo“{$row['student_code']}$rank{$row['total']}\n”;
如果($lastTotal==0){
$lastTotal=$row['total'];//第一次设置$lastTotal时。
}
如果($lastTotal>$row['total'])){
$lastTotal=$row['total'];
$rank++;
}
}
使用此选项,仅当当前学生的排名低于他之前的学生时,您才会增加排名。 如果您知道自己的最大总值,则可以删除首次设置$lastToal的检查。如果是这样,例如它是100,只需将它设置为$lastTotal=100,并删除while循环中的第一个If

$rank = 1;
$lastTotal = 100;
while($row = mysql_fetch_assoc($result)) 
{ 
    echo "<tr><td>{$row['student_code']}</td><td>$rank</td><td>{$row['total']}</td></tr>\n"; 
    if ($lastTotal > $row['total']) {
        $lastTotal = $row['total'];
        $rank++;
    }
}
$rank=1;
$lastTotal=100;
while($row=mysql\u fetch\u assoc($result))
{ 
echo“{$row['student_code']}$rank{$row['total']}\n”;
如果($lastTotal>$row['total'])){
$lastTotal=$row['total'];
$rank++;
}
}

请使用
mysqli.*
函数
mysql.*
函数现在已经很旧了

<?php 
require_once("include/connection.php");
$query = "SELECT * FROM `total` ORDER BY `total` DESC"; 
$result = mysql_query($query) or die(mysql_error()); 

$rank = $previous = 0;

echo "<table><tr><th>Student Code</th><th>Rank</th><th>Total</th></tr>"; 

while($row = mysql_fetch_assoc($result)) 
{ 
    // break statement at the end has no effect since you are doing echo on top.
    if ($rank == 100)break; 

    // If same total will skip $rank++
    if($row['total'] != $previous)$rank++;

    echo "<tr><td>".$row['student_code']."</td><td>$rank</td><td>".$row['total']."</td></tr>"; 

    // Current row student's total 
    $previous = $row['total'];
} 
echo "</table>";  
?>

<代码>我会迁移到MySqLi,但我在PHP上仍然不太好,我仍然在学习PHP的基础,听到MysQuelg高兴,祝你度过美好的一天,如果你对给定的答案满意,不要忘记考虑接受。