我正在创建一个排行榜,它将显示以下内容:排名,用户名,分数
我目前有表,它将显示用户名和分数从一个mysql表中的数据,我只是想知道我如何去显示每个用户的排名,数字1是最高的分数,然后下降的用户。
谢谢!
我推荐阅读PHP/MySQL
HTML Header:打开你的表,创建你的Header
<table>
<tr>
<td>Rank</td>
<td>User</td>
<td>Score</td>
</tr>
PHP:动态生成每个用户的行
<?php
$result = mysql_query("SELECT user, score FROM leaderboard ORDER BY score DESC");
$rank = 1;
if (mysql_num_rows($result)) {
while ($row = mysql_fetch_assoc($result)) {
echo "<td>{$rank}</td>
<td>{$row['user']}</td>
<td>{$row['score']}</td>";
$rank++;
}
}
?>
HTML页脚:需要关闭表
</table>
您可以在SQL中完成所有操作:
SET @row = 0;
SELECT
@row := @row + 1 AS rank
userName,
score
FROM
leaderboard
ORDER BY
score DESC
你需要1)获取你想要排名的记录的分数2)计算带有"更好"分数的记录数量("更好"取决于你的游戏类型)。篮球,分数越高越好。高尔夫,分数越低越好。
比如
select records in order
for each record
score = record.score
rank = select count(*) + 1 from table where score_column is better than score
display data
end for
问题是对任何大量的数据执行count(*)都很慢。但是您可以看到,一旦您有了前两个不同分数的排名,您就可以确定代码中其余行的排名,而无需查询。但请记住:您可能需要考虑领带。
我同意
$result = mysql_query("SELECT user, score FROM leaderboard ORDER BY score DESC");
$rank = 1;
if (mysql_num_rows($result)) {
while ($row = mysql_fetch_assoc($result)) {
echo "<td>{$rank}</td>
<td>{$row['user']}</td>
<td>{$row['score']}</td>";
$rank++;
}
}
?>`
但是我有一个程序mysql的问题,所以我选择了面向对象的版本,我找不到很多文档。但是,如果@Josh的答案对你不起作用,这应该会给你同样的结果。
<?php
$query = 'SELECT user, score FROM leaderboard ORDER BY score DESC';
$result = $conn ->query($query);
while ($row = $result->fetch_row()){
echo"<td>{$row[0]}</td>
<td>{$row[1]}</td>";
}
?>
当然,如果你想显示排名,你也可以像上面一样添加这个