我有一个排行榜,显示销售额最高的顶级人物。
这很简单。它只是获得前25名并显示它们
$user = \App\User::orderBy('sales', 'desc')
->take(25)
->get();
所以最终可能会以
结束+-------+-------------------+
| pos |user_id| sales |
----------------------------|
| 1 | 1 | 1,293 |
| 2 | 99 | 1,093 |
| 3 | 45 | 985 |
| 4 | 948 | 900 |
| 5 | 39 | 889 |
| 6 | 29 | 887 |
+---------------------------+
现在,如果他们不在前25名中,我怎样才能获得正在查看排行榜的用户的位置?
如果用户ID 219位于935位置,我想在结尾显示类似的内容
+-------+-------------------+
| pos |user_id| sales |
|---------------------------|
| 935 | 219 | 87 |
+---------------------------+
如何在不计算用户的情况下有效地完成这项工作? (因为有成千上万的用户)
答案 0 :(得分:3)
我想你有当前的用户数据。因此,您无需查询数据库即可获取当前用户id
或sales
。因此,主要问题是找到比当前更多sales
的用户数。
所以,你需要一个像
这样的查询SELECT COUNT(*) as pos FROM your_table WHERE sales > %current_user_sales%
将其翻译为laravel查询,并在ouptutting时添加1
。