我可以对GroupBy使用偏移量(跳过)吗?

时间:2019-04-24 04:58:51

标签: mysql sql laravel laravel-5

下面是我的查询,并且我添加了一些说明。

$recommendedByVideoId = RecommendedVideo::selectRaw('video_id,id')
                ->orderBy('played_count', 'desc')
                ->orderBy('updated_at', 'desc')
                ->get()
                ->skip(3)
                ->take(2)
                ->groupBy('video_id')

下面是我的查询结果:

        [video_id_1] => [record1, record2, record3, record4, record5],
        [video_id_2] => [record1, record2, record3, record4, record5],
        [video_id_3] => [record1, record2, record3, record4, record5],
        [video_id_4] => [record1, record2, record3, record4, record5],
        [video_id_5] => [record1, record2, record3, record4, record5, record6, record7],

预期结果应该类似于:

        [video_id_1] => [record4, record5],
        [video_id_2] => [record4, record5],
        [video_id_3] => [record4, record5],
        [video_id_4] => [record4, record5],
        [video_id_5] => [record4, record5],

请帮助我写出查询,该查询从内部集合而不是外部集合中跳过记录。

谢谢。

1 个答案:

答案 0 :(得分:1)

此处已在statckoverflow skip frist row and take the rest

中回答

因此,要使用此功能,必须将takeskip一起使用,因为使用偏移量时,您会给数字赋予正确的权限。

因此,首先获取count数据库中有多少行。

$count = Model::count()

然后$skip = 3 找到您提供给limit方法的take $limit = $count - $skip 现在这是您的最终查询

Model::skip($skip)->take($limit)->get();

您也可以将其与groupBy一起使用

,如果您不想更改查询,则获取不带skiptake的所有数据 并使用收集方法except

$data = $dataFromDataBase->except([0,1,2]);

它将自动从您的数据中删除给定密钥