繁体   English   中英

如何从分数显示排名到排行榜

[英]How can I display rank to leaderboard from score

我正在尝试使用 Mysql 中的分数表创建排行榜。 我只使用分数表中的“姓名”和“分数”。 我可以显示按最高分排序的排行榜,但不能显示排名。 这是我获取数据的php文件:

// Connect to server and select database.
$con = mysqli_connect($host, $db_username, $db_password, $db_name);

// Retrieve data from database
$sql = "SELECT *
        FROM scores
        ORDER BY score DESC
        LIMIT 10";  // The 'LIMIT 10' part will only read 10 scores. Feel free to change this value
$result = mysqli_query($con, $sql);

// Start looping rows in mysql database.
while($rows = mysqli_fetch_array($result)){
    echo $rows['name'] . "|" . $rows['score'] . "|";
// close while loop 
}

// close MySQL connection 
mysqli_close($con);
?>

我想我最终可能需要这样的东西:

while($rows = mysqli_fetch_array($result)){
    echo $rows['rank'] . "|" . $rows['name'] . "|" . $rows['score'] . "|";

但无法设法正确获取它......

结果应显示如下:

<br/> Mardoch        49507
<br/> Gunthylapointe 49504

我究竟做错了什么?

你想要窗口函数吗?

select rank() over(order by score desc) rn, s.*
from scores
order by score desc

这将向结果集添加另一列,称为rn ,其中包含每行的排名,按分数降序排列。

好吧,我稍微更改了我的代码并添加了以下内容:

// Retrieve data from database
$sql = "SELECT *
        FROM scores
        ORDER BY score DESC";
        //LIMIT 10";    // The 'LIMIT 10' part will only read 10 scores. Feel free to change this value
$result = mysqli_query($con, $sql);
    
    $i = 0;
    
// Start looping rows in mysql database.
while($rows = mysqli_fetch_array($result)){
        $i++;
        
    echo ($i) . "|" . $rows['name'] . "|" . $rows['score'] . "|";
// close while loop 
}

它的工作要好一些,但它会立即停止我的排行榜并在之后显示很多 0:

屏幕截图

似乎问题是因为下一个分数和上一个完全一样......所以它在这里中断

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM