排名重复条目

问题描述:

我已经创建了一些代码,我发现在这个网站上的排名系统,它都工作正常,但我有一个问题。排名重复条目

它从数据库中提取所有细节,给他们一个等级,并把它们排列好,但似乎所有的细节都在一起。

所以说我有两个用户,一个拥有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:我看到你的问题,这是在顶部的查询。您必须使用连接才能将黄金连接到相应的用户。

将查询更改为: $ sql =“SELECT stats.gold,stats.id,users.username,users.id FROM users LEFT JOIN stats ON stats.id = users.id ORDER BY gold DESC”;

(如果表中的统计信息中的i​​d与user-id相同,则应该使用类似ON stats.userID = users.id的内容) 您是否理解这一点?

编辑:忘记这个答案,我看到你想要相同的排名时,人们有相同数量的黄金。我的屏幕截图中没有看到问题(有不同数量的黄金和不同的排名......)您仍然可以像我一样在代码中添加
,以获得更好的概述。

行更改为:

echo "rank ".$rows." is ".$row['username']." with gold ".$row['gold']."<br>"; 

(因此改变$军衔$行,因为黄金已经工作,你可以在截图中看到,不是每个人都有同样的黄金!)

+0

谢谢,这使得它们处于顺序:)仍然说所有用户都有4000100金币,只有用户名“6”有这个数量http://snag.gy/Q73At.jpg – 2014-09-25 10:32:14

+1

我编辑我的答案,我最后的编辑是在顶部。我希望这能帮到您。 – 2014-09-25 10:34:29

+0

工作!我知道这是一种加入问题,我认为这是回声而不是查询。非常感谢:) – 2014-09-25 10:38:47

简单的解决方案:

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']; 
    } 
} 
+0

对不起,我的措辞。问题在于它为每个用户显示了最高的黄金。所以如果一个用户拥有400000金币,就会显示每个用户都有40万金币(如截图所示) – 2014-09-25 10:26:19

+1

哦,没有看到第二部分,也许是在编辑之前! – andyroo 2014-09-25 10:27:41

+1

@RyanMcKenna编辑我的答案,希望这就是你要找的 – andyroo 2014-09-25 10:33:37