首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在评分表中获取用户排名

在评分表中获取用户排名
EN

Stack Overflow用户
提问于 2018-11-14 22:27:32
回答 1查看 469关注 0票数 0

我正在使用Laravel,这可能是我的用户表:

代码语言:javascript
复制
id|score
1|10
2|13
3|15
4|7
5|11

用户可以看到有两个等级的页面:A级和B级。

A级

前10个用户按分数计算,有两种可能的情况:看到这一排名的用户是否在前10个用户中。

前10名用户:获取10个用户的列表()

用户不在前10:获得11个用户的列表(前10 +当前用户在所有用户中的位置)

B级

前10个用户在给定的ID组中得分(有时为1,有时为10,有时为0),这两种情况相同:用户是否在前10位。

前10名用户:获取10个用户的列表()

用户不在前10:获得11个用户的列表(前10 +当前用户在ids组中的位置)

有什么办法能用雄辩的口才来做吗?否则,我如何在MySql中做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-14 22:49:28

为了获得第一名,你可以用雄辩的口才做到这一点:

代码语言:javascript
复制
$users = User::orderBy('score', 'DESC')->limit(10)->get();
$currentUser = Auth::user();
$currentUserId = $currentUser->id;
if (!$users->contains('id', $currentUserId)) {
    $users->push($currentUser);
}

由于$users将按分数排序,如果当前用户不存在于前10名,那么他的得分将比列表中的最后一位差,因此将其添加到末尾是有意义的。

第二等级:

代码语言:javascript
复制
$idsFilter = [1, 2, 3, 4, 5];
$users = User::whereIn('id', $idsFilter)->orderBy('score', 'DESC')->limit(count($idsFilter))->get();
$currentUser = Auth::user();
$currentUserId = $currentUser->id;
if (!$users->contains('id', $currentUserId)) {
    $users->push($currentUser);
}
return $users;

因为您希望有一个固定的if列表来排序,所以只有当当前用户不是您所要求的顶级X if的一部分时,才有必要显示if,并添加当前用户。

要获得A级用户的位置,可以在User模型上执行如下方法:

代码语言:javascript
复制
public function getPosition()
{        
    return DB::raw("SELECT COUNT(*) + 1
                    FROM users
                    WHERE score > {$this->score}");
}

并在B级的ids上添加一个过滤器,并使用相同的进程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53309668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档