排名重复参赛作品

时间:2014-09-25 10:22:26

标签: php mysqli

我已经从我在这个网站上找到的一些代码创建了一个排名系统,它一切正常,但我有问题。

它从数据库中提取所有细节,给他们一个排名并将它们整理好,但似乎所有细节都在一起。

所以说我有两个用户,一个有20金,一个有10个,我希望它像这样显示

等级1是约翰与金20 等级2是彼得与黄金10

但是显示

排名1是约翰与金20rank 1是彼得与金20(真实截图:http://snag.gy/lNVNd.jpgenter image description here

它们现在已经有序但只有用户名" 6"有4000100金?! enter image description here

只有一个用户实际拥有第一笔金额!

帮助:(

这里是完整的代码

<?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");
?>

2 个答案:

答案 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,因为黄金已经正常工作,你可以在屏幕截图中看到,不是每个人都拥有相同的金币!)