2014-09-25 96 views
0

我已經創建了一些代碼,我發現在這個網站上的排名系統,它都工作正常,但我有一個問題。排名重複條目

它從數據庫中提取所有細節,給他們一個等級,並把它們排列好,但似乎所有的細節都在一起。

所以說我有兩個用戶,一個擁有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"); 
?> 

回答

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」;

(如果表中的統計信息中的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

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