Пользователь регистрирует команду с помощью нашей программы, а затем вводит количество миль, которые он проходит за день / неделю / и т. Д. Кроме того, во время программы мы проводим небольшие мероприятия. События будут иметь листовки с 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>';
}
?>
Вам нужно подать отдельную 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 --------------------^
Других решений пока нет …