Z_xugaaa 2020-12-05 10:10 采纳率: 0%
浏览 53

Laravel Eloquent 进行查询统计优化.

这是一个用户推荐统计以及排序的功能
想实现的效果是查询出用户的姓名
然后统计 他的推荐总人数 以及被推荐人 每个 状态的 人数


使用 orderBy 排序会出现 sql 执行时间数十秒的情况
不使用 orderBy 排序无法实现到最多人数的在最上面
请各位大神指教,该如何进行优化

 

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-15 00:08
    关注

    对于这个情况,你可以考虑使用 Eloquent 的 withCount 方法来进行用户的推荐总人数和被推荐人状态下的人数的统计。例如:

    $users = User::withCount([
        'recommendations',
        'recommendations as accepted_recommendations_count' => function ($query) {
            $query->where('status', 'accepted');
        },
        'recommendations as pending_recommendations_count' => function ($query) {
            $query->where('status', 'pending');
        },
    ])
    ->get();
    

    然后,你可以使用 Laravel 的集合方法来对结果进行排序,例如:

    $users = $users->sortByDesc(function ($user) {
        return $user->accepted_recommendations_count;
    });
    

    如果你的数据量非常大,可以考虑对 recommend_status 字段创建索引以加快查询速度。同时,你也可以使用 Laravel 自带的缓存功能将查询结果缓存起来,避免频繁查询数据库。

    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题