2014-09-25 2 views
0

Я создал систему ранжирования из некоторого кода, который я нашел на этом сайте, все работает отлично, но у меня есть проблема.Рейтинги, повторяющие записи

Он извлекает все детали из базы данных, дает им ранг и ставит их в порядок, но, похоже, все детали собираются вместе.

Так что у меня есть два пользователя, один имеет 20 золотых и один имеет 10, я хочу, чтобы показать, как этот

Уровень 1 Джон с золотом 20 ранга 2 Петр с золотом 10

, но вместо этого он показывает

ранга 1 является джон с золотым 20rank 1, питер с золотом 20 (реальный скриншот: http://snag.gy/lNVNd.jpg) enter 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

EDIT 2: Я вижу вашу проблему, это запрос наверху. Вы должны использовать соединение для подключения золота к соответствующему пользователю.

Изменить запрос на: $ sql = "SELECT stats.gold, stats.id, users.username, users.id ОТ пользователей LEFT JOIN stats ON stats.id = users.id ORDER BY gold DESC";

(Если идентификатор в статистике таблицы совпадает с идентификатором пользователя, в противном случае вы должны использовать что-то вроде ON stats.userID = users.id) Вы понимаете это?

EDIT: забудьте об этом ответе, я вижу, что вы хотите, чтобы те же самые ряды, когда у людей одинаковое количество золота. Я не вижу проблемы на вашем скриншоте (есть разные количества золота и разные ранги ...) Вы все равно можете добавить
в свой код, как и я, чтобы получить более приятный обзор.

Изменения линия:

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

(Меняют $ ранга $ строк, потому что золото уже работает, как вы можете видеть на скриншоте, не каждый имеет то же самое золото !!)

+0

Спасибо, что поставили их в порядок :) все еще говорит, что все пользователи имеют золото 4000100, хотя, только имя пользователя "6" имеет такую ​​сумму http://snag.gy/Q73At.jpg –

+1

Я отредактировал мой ответ, мое последнее редактирование находится наверху. Я надеюсь, что это поможет вам. –

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

Извините за мои формулировки. Проблема в том, что он показывает самое высокое золото для каждого пользователя. Так что, если у одного пользователя есть 400 000 золотых, это покажет, что у каждого пользователя есть 400 000 золота (как показано на снимке экрана) –

+1

О, не вижу второй части, возможно, это было до редактирования! – andyroo

+1

@ RyanMcKenna Отредактировал мой ответ, надеюсь, это то, что вы искали – andyroo

Смежные вопросы