我已经从我在这个网站上找到的一些代码创建了一个排名系统,它一切正常,但我有问题。
它从数据库中提取所有细节,给他们一个排名并将它们整理好,但似乎所有细节都在一起。
所以说我有两个用户,一个有20金,一个有10个,我希望它像这样显示
等级1是约翰与金20 等级2是彼得与黄金10
但是显示
排名1是约翰与金20rank 1是彼得与金20(真实截图:http://snag.gy/lNVNd.jpg)
它们现在已经有序但只有用户名" 6"有4000100金?!
只有一个用户实际拥有第一笔金额!
帮助:(
这里是完整的代码
<?php
include("header.php");
include("connect.php");
if(isset($_SESSION['userlogin'])){
$sql = "SELECT stats.gold, stats.id, users.username, users.id FROM users, stats ORDER BY gold DESC";
$result = mysqli_query($con,$sql);
if( !$result ){
echo 'SQL Query Failed';
}else{
$rank = 0;
$last_score = false;
$rows = 0;
while( $row = mysqli_fetch_array( $result ) ){
$rows++;
if( $last_score!= $row['gold'] ){
$last_score = $row['gold'];
$rank = $rows;
}
echo "rank ".$rank." is ".$row['username']." with gold ".$row['gold']."";
}
}
}else{
echo "You must be logged in to view this page!";
?>
<?php
}
include("footer.php");
?>
答案 0 :(得分:1)
最简单的解决方案:
echo "rank ".$rank." is ".$row['username']." with gold ".$row['gold']." ";
^add a space
然后对于排名问题,请更改:
while( $row = mysqli_fetch_array( $result ) ){
$rows++;
if( $last_score!= $row['gold'] ){
$last_score = $row['gold'];
$rank = $rows;
}
}
对此:
while( $row = mysqli_fetch_array( $result ) ){
$rank++;
if( $last_score!= $row['gold'] ){
$last_score = $row['gold'];
}
}
答案 1 :(得分:1)
编辑2:我看到你的问题,这是顶部的查询。您必须使用连接将黄金连接到相应的用户。
将查询更改为: $ sql =“SELECT stats.gold,stats.id,users.username,users.id FROM users LEFT JOIN stats ON stats.id = users.id ORDER BY gold DESC”;
(如果表统计中的id与user-id相同,否则你应该使用类似ON stats.userID = users.id) 你明白这个吗?
编辑:忘了这个答案,我发现当人们拥有相同数量的黄金时你想要相同的等级。我没有在你的截图中看到问题(有不同数量的黄金和不同的排名......)你仍然可以像我一样在你的代码中添加,以获得更好的概述。将行更改为:
echo "rank ".$rows." is ".$row['username']." with gold ".$row['gold']."<br>";
(所以将$ rank更改为$ rows,因为黄金已经正常工作,你可以在屏幕截图中看到,不是每个人都拥有相同的金币!)