如何获得一个行位置使用雄辩

uz75evzq  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(240)

我有一个排行榜,上面列出了销售额最高的人。
很简单。它只会得到前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    |
+---------------------------+

如何在不计算用户数量的情况下有效地实现这一点(因为有成千上万的用户)

rn0zuynd

rn0zuynd1#

我想你有当前的用户数据。因此,您不必查询数据库来获取当前用户 id 或者 sales . 所以,主要的问题是找到拥有更多用户的计数 sales 比现在的情况要好。
所以,你需要一个类似

SELECT COUNT(*) as pos FROM your_table WHERE sales > %current_user_sales%

将其转换为laravel查询并添加 1 启动时。

相关问题