首页 > 解决方案 > 如何选择集数最高的相关子主题视频?

问题描述

我有一个子主题表和一个视频表,它们是相关的。我的视频表如下所示

|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);

标签: mysqllaraveleloquentgreatest-n-per-group

解决方案


这是查询;

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.*']);

推荐阅读