如何 select 与最高集数相关的副主题视频?
How do I select related subtopic videos with the highest episode number?
我有一个副主题 table 和一个视频 table,它们是相关的。我的视频 table 如下所示
|id| sub_topic_id| episode | title | description |
|1 | 1 | 1 | Hello | Test |
|2 | 1 | 10 | Hello2 | Test |
|3 | 2 | 1 | Hello3 | Test |
我现在想要的是用 highest episode number
获取 every subtopic
的视频并对其进行分页。
在我的示例中,子主题 1 得到 10,子主题 2 得到 1。
我希望我的意思很清楚,也许有人可以帮助我。
我目前在 eloquent 中尝试的是
$videos = \DB::table('videos')->where('episode', \DB::raw("(select max(`episode`) from videos)"))->paginate(10);
将剧集列结构设置为完整
然后尝试
$videos = \DB::table('videos')->orderby('episode',DESC)->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;
这是eloquent版本;
$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.*']);
我有一个副主题 table 和一个视频 table,它们是相关的。我的视频 table 如下所示
|id| sub_topic_id| episode | title | description |
|1 | 1 | 1 | Hello | Test |
|2 | 1 | 10 | Hello2 | Test |
|3 | 2 | 1 | Hello3 | Test |
我现在想要的是用 highest episode number
获取 every subtopic
的视频并对其进行分页。
在我的示例中,子主题 1 得到 10,子主题 2 得到 1。
我希望我的意思很清楚,也许有人可以帮助我。 我目前在 eloquent 中尝试的是
$videos = \DB::table('videos')->where('episode', \DB::raw("(select max(`episode`) from videos)"))->paginate(10);
将剧集列结构设置为完整 然后尝试
$videos = \DB::table('videos')->orderby('episode',DESC)->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;
这是eloquent版本;
$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.*']);