mysql - 如何选择集数最高的相关子主题视频?
问题描述
我有一个子主题表和一个视频表,它们是相关的。我的视频表如下所示
|id| sub_topic_id| episode | title | description |
|1 | 1 | 1 | Hello | Test |
|2 | 1 | 10 | Hello2 | Test |
|3 | 2 | 1 | Hello3 | Test |
我现在想要的是获取视频并every subtopic
对其进行highest episode number
分页。在我的示例中,我将获得 10 的子主题 1 和 1 的子主题 2。
我希望我的意思很清楚,也许有人可以帮助我。我现在用雄辩的方式尝试的是
$videos = \DB::table('videos')->where('episode', \DB::raw("(select max(`episode`) from videos)"))->paginate(10);
解决方案
这是查询;
SELECT videos.*
FROM videos
JOIN (
SELECT sub_topic_id, MAX(episode) AS maxEpisode
FROM videos
GROUP BY sub_topic_id) AS subQuery
ON subQuery.maxEpisode = videos.episode AND subQuery.sub_topic_id = videos.sub_topic_id;
这是雄辩的版本;
$subQuery = DB::table('videos')
->groupBy('sub_topic_id')
->select('sub_topic_id', DB::raw('MAX(episode) as maxEpisode'));
return Video::join(DB::raw('(' . $subQuery->toSql() . ') as subQuery'), function ($join) {
$join->on('subQuery.maxEpisode', '=', 'videos.episode');
$join->on('subQuery.sub_topic_id', '=', 'videos.sub_topic_id');
})->get(['videos.*']);
推荐阅读
- google-apps-script - 过滤时方法签名更改
- c# - 为什么 Graphics.DrawImage() 会改变颜色(不使用调整大小)?
- mongodb - MongoDB聚合使用不能在一起的对列表查找文档对
- python - 如何从多列中删除包括 0 在内的所有正数并使用 pandas 保留行?
- c# - 查找包含在不同类型双引号中的字符串
- python - 将值从 df 列的第 2 行复制到第 1 行(使用日期时间索引)
- ios - 在 UITableViewCell 的 awakeFromNib 中无法访问 IBOutlet
- jenkins - 如何限制 Jenkins 访问特定的 github 组织?
- firebase - SwiftUI / Firebase:我可以使用@Published 向 Firebase 数据库发送和接收单个值吗?
- javascript - 从 Javascript Promise 读取数据