排行榜,排序问题
Leaderboard, sorting issues
计划理想:
用户在我们的计划中注册了一个团队,然后输入他们每 day/week/etc 步行的英里数。此外,在计划期间,我们举办小型活动。这些活动将有带有二维码的传单,用户扫描二维码,然后输入他们的信息。一旦他们这样做,用户就会因参加该活动而获得荣誉。该网站有一个基于他们参加的活动以及他们走了多少英里的积分系统。
情况:
我有 2 个 table 存储两个需要将它们相加的不同变量,然后每个变量使用一个除法来确定该总和的点值,然后将其放入一个领导者中板 table,并按获得的积分降序排列。
目前,它按步行的英里数降序排列。
关于如何解决这个问题有什么想法吗?我在想也许是某种数组魔法,我将每个用户的信息存储到一个数组中,然后将其取出,但我什至不知道如何开始那个数组。
注意事项:
用户名存储在table:Team_Assign
用户的步行里程存储在table: Miles
用户参加的活动存储在table:Events
我将这三个 table 连接在一起。
示例:
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 --------------------^
计划理想:
用户在我们的计划中注册了一个团队,然后输入他们每 day/week/etc 步行的英里数。此外,在计划期间,我们举办小型活动。这些活动将有带有二维码的传单,用户扫描二维码,然后输入他们的信息。一旦他们这样做,用户就会因参加该活动而获得荣誉。该网站有一个基于他们参加的活动以及他们走了多少英里的积分系统。
情况:
我有 2 个 table 存储两个需要将它们相加的不同变量,然后每个变量使用一个除法来确定该总和的点值,然后将其放入一个领导者中板 table,并按获得的积分降序排列。
目前,它按步行的英里数降序排列。
关于如何解决这个问题有什么想法吗?我在想也许是某种数组魔法,我将每个用户的信息存储到一个数组中,然后将其取出,但我什至不知道如何开始那个数组。
注意事项:
用户名存储在table:Team_Assign
用户的步行里程存储在table: Miles
用户参加的活动存储在table:Events
我将这三个 table 连接在一起。
示例:
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 --------------------^