Таблица лидеров, вопросы сортировки

1

Программа Идеальная:

Пользователь подписывает команду с нашей программой, а затем вводит количество миль, которые они ходят в день/неделю/и т.д. Кроме того, во время программы мы принимаем небольшие мероприятия. События будут иметь летчики с QR-кодами, и пользователь сканирует код и вводит их информацию. Как только они это сделают, пользователь получает кредит за то, что был на этом мероприятии. На веб-сайте есть система баллов, основанная на том, какие события они посещают, и сколько миль они ходят.

Ситуация:

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

В настоящее время он сортирует их по убыванию, по милям.

Любые идеалы о том, как я могу это исправить? Я думал, может быть, какая-то магия массива, где я храню каждую информацию пользователя в массиве, а затем вытаскиваю ее, но у меня нет идеала, как начать с этого.

Что нужно отметить:

Имя пользователя хранится в таблице: Team_Assign

Протянутые мили пользователей хранятся в таблице: Miles

Событие, посещенное пользователем, хранится в таблице: События

Я внутренне соединяю эти три таблицы вместе.

Пример:

10 миль - 1 балл, 2 - 1 балл.

У Джона 10 миль, и 4 события, которые будут 3 очка Джейн имеет 20 миль и 1 случай, который будет 2,5 очка

В настоящее время он сортирует, у кого больше миль, и я понимаю, почему это так, но я не знаю, как повторить запрос, чтобы он сортировал точки, которые установлены во время цикла while.

Он должен показать:

Джон 3

Джейн 2,5

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

Джейн 2,5

Джон 3

Код:

<?php
$Count = 0;
$LB_User_Query = "  SELECT Miles_User, Team_Assign_Name, SUM(Miles_Amount) AS 'Miles', SUM(Event_Count) AS 'Event_Count2'
                    FROM Team_Assign 
                    INNER JOIN Miles ON  Team_Assign_User = Miles_User
                    INNER JOIN Event ON Team_Assign_User = Event_User 
                    GROUP BY Miles_User, Team_Assign_User, Team_Assign_Name
                    ORDER BY Miles, Event_Count2 Desc";
$LB_User_stmt = $conn->prepare($LB_User_Query);
$LB_User_stmt->execute();                           
$LB_User_stmt->bind_result($Miles_User, $Team_Assign_Name, $Miles, $Event_Count2);

while (mysqli_stmt_fetch($LB_User_stmt)) 
{
    $User_Miles = $Miles;
    $Count = $Count + 1;

    $Miles_Points_indc = 10;
    $Event_Points_indc = 1;

    $Miles_Points_Total_1 = $User_Miles / $Miles_Points_indc;
    $Miles_Points_Total_2 = $Miles_Points_Total_1 / $Event_Count2;
    $Event_Points_Total =  $Event_Count2 / $Event_Points_indc;

    $Total_Points = $Miles_Points_Total_2 + $Event_Points_Total;
    $Total_Points_Round = round($Total_Points, 2);

    echo'<tr>';
            echo'<td>'.$Count.'</td>
                 <td>'.$Team_Assign_Name.'</a></td>
                 <td>'.$Total_Points_Round .'</td>';
    echo'</tr>';
    }
?>
Теги:
select
sql-order-by

1 ответ

1
Лучший ответ

Вам нужно применить отдельный модификатор desc к каждому отсортированному столбцу:

$LB_User_Query = "  SELECT Miles_User, Team_Assign_Name, SUM(Miles_Amount) AS 'Miles', SUM(Event_Count) AS 'Event_Count2'
                    FROM Team_Assign 
                    INNER JOIN Miles ON  Team_Assign_User = Miles_User
                    INNER JOIN Event ON Team_Assign_User = Event_User 
                    GROUP BY Miles_User, Team_Assign_User, Team_Assign_Name
                    ORDER BY Miles DESC, Event_Count2 Desc";
# missing here --------------------^

Ещё вопросы

Сообщество Overcoder
Наверх
Меню