Я следовал за предыдущим вопросом и отвечаю по этой ссылке: Получить строку следующего по рангу до «ранга последнего идентификатора»?
К сожалению, я не смог получитьрезультат, как я и ожидал.Ожидаемый результат:
id score rank
1 78 4
2 80 3
3 100 1
4 88 2
5 56 5
В базе данных у меня есть id, счет в моей таблице: результат.Теперь то, что я пытаюсь сделать, это поставить рейтинг в таблицу.
Мой код указан ниже:
<?php
include ('config.php');
?>
<!DOCTYPE html>
<html>
<head>
<title>ranking</title>
</head>
<body>
<?php
if($db){
//Create Query
$sql = "SELECT * FROM result ORDER BY score DESC";
//Execute Query
$result = mysqli_query($db,$sql);
if($result -> num_rows > 0){
//output data for each row
echo "
<br><br>
<table align='center'; border=1; style='text-align:center'>
<tr>
<td colspan='4'>RANKING TABLE</td>
</tr>
<tr>
<th>Bil</th>
<th>ID</th>
<th>Result</th>
<th>Rank</th>
</tr>
";
$i = 0;
//Store rows by rank + get the last_id_rank from the first row
$by_ranks = array();
$last_id_rank = FALSE;
//Display Result
while($row = $result -> fetch_assoc()){
$i++;
echo "
<tr>
<td>".$i."</td>
<td>".$row["id"]."</td>
<td>".$row["score"]."</td>
<td>".$row["rank"]."</td>
</tr>
";
$by_ranks[$row["rank"]][]=$row;
if($last_id_rank === FALSE){
$last_id_rank = $row["rank"];
}
}
//Get the result
$get_results = function($by_ranks, $last_id_rank){
//Get sorted array that's smaller $last_id_rank
$ranks = array_filter(array_keys($by_ranks),function($var) use ($last_id_rank){
return $var < $last_id_rank;
});
rsort($ranks); //Sort ranks by DESC
//Get rank that is just smaller than $last_id_rank
if(sizeof($ranks) == 0){
return array();
}
else{
return $by_ranks[$ranks [0]];
}
};
$results = $get_results($by_ranks,$last_id_rank);
//Display results
foreach($results as $row){
echo "
<br><br><br><br>
<tr>
<td>{$row["id"]}</td>
<td>{$row["score"]}</td>
<td>{$row["rank"]}</td>
</tr>
";
}
echo "
</table>
";
}
}
else{
echo "Failed to connect";
mysqli_close($db);
}
?>
</body>
</html>
Данные в моей базе данных следующие:
id score rank
1 78 0
2 80 0
3 100 0
4 88 0
5 56 0