douba05167 2015-05-29 08:56
浏览 69
已采纳

得到学生的等级

I am trying to get rank of student by using total marks, that is the student with higher marks than the other should be the first and so on, I'm using while loop to do so, but when two or more student have the same total marks they get different rank, what I want to achieve is when two or more student have the same total marks they should have the same rank, please help, here is my code.

<?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>
"; 
while($row = mysql_fetch_assoc($result)) 
{ 
    echo "<tr><td>{$row['student_code']}</td><td>$rank</td><td>{$row['total']}</td></tr>
"; 
    if ($rank == 100) 
    { break; }
    $rank++; 
} 
echo "</table>
";  
?>
  • 写回答

3条回答 默认 最新

  • douzongluo7542 2015-05-29 09:11
    关注

    Please use mysqli_* functions mysql_* functions are very old now

    <?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>";  
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?