我想基于总分和平均时间来获得用户排名位置。但是,我正在使用的查询给出了错误的职位编号。
$myId = TotalScore::where('user_id', $user_id)->first();
$position = TotalScore::where('ts', '>=', $myId->ts)
->where('avg_times_taken', '>=', $myId->avg_times_taken)->count();
表结构
比方说,我想知道我的排名。该查询需要比较我的总得分(ts)和平均花费的时间(avg_times_taken
)并显示我的位置。如果两个用户获得相同的分数,则平均时间较低的用户排名会更好。
答案 0 :(得分:1)
从以上评论中可以明显看出,总分与平均花费时间成反比。即total_score与average_time_taken之间的比率应为我们提供一些值,我们现在将使用该值来定位或排序记录。
因此,首先,我将在表中引入另一列并计算比率。
假设我们将列称为ratio_average
要获取我们列的值,只需输入total_score / average_time_taken
所以现在从表中获取结果时,我们只需执行以下操作:
TotalScore::orderBy('ratio_average', 'desc')->get();
现在上面将按照从第一个位置开始的正确位置顺序为您提供结果
答案 1 :(得分:1)
这是MySQL查询的样子:
SELECT
(
SELECT COUNT(*)
FROM TableScore X
WHERE X.ts > T.ts OR (X.ts = T.ts AND X.avg_times_taken < T.avg_times_taken)
) + 1 AS position
FROM TableScore T
WHERE T.user_id = '7';