php - 不加载模型的 Laravel OrderBy 关系计数(计数)
问题描述
我有一张episodes
桌子和一张episode_Listen
桌子,这是一集到很多听
我想获得最高听的 6 集。我已经尝试了如下每一个解决方案:
$trending = Episode::where('active', true)
->get()->sortBy(function($podcast) {
return $podcast->latestListens;
});
或者
$trending = Episode::where('active', true)
->withCount('listens')
->orderBy('listens_count', 'desc')
->get();
或者
$trending = Episode::join('episode_listens', function ($join) {
$join->on('episode_listens.episode_id', '=', 'episodes.id');
})
->groupBy('episodes.id')
->orderBy('count', 'desc')
->select((['episodes.*', DB::raw('COUNT(episode_listens.podcast_id) as count')]))->paginate(6);
但是执行时间总是超过 6 秒,因为我在数据库中有大约 500k 的监听记录,它们会在很短的时间内达到数百万。
有什么想法吗?
提前致谢
解决方案
推荐阅读
- node.js - 如何使用_id(node.js)检索mongoDB中关联的子文档
- ios - 如何使标签栏项目仅可用于特定目标?
- javascript - Web Speech API 无法在 Chrome for Android 中正确加载语音
- spring - 休眠自动更新列未由代码更改
- cors - ASP.NET Core 3.1 + CORS + Windows 身份验证 = 401 未经授权
- azure-pipelines - 如何在 azure piplines 中交换之前将文件从生产复制到暂存槽
- python - MySQL order table 按添加行的顺序
- php - 在 Ubuntu 16.04 上使用 PHP7.x 安装 Apache 2.2
- python - Python pyglet 不停地重复播放音频
- php - 限制循环的数量,然后将其传递给下一个进程