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

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

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

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

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

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

Количество пройденных миль пользователя хранится в таблице: Мили

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

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

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>';
}
?>

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 --------------------^
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]