【问题标题】:Can i use offset (skip) with GroupBy?我可以在 GroupBy 中使用偏移(跳过)吗?
【发布时间】:2019-09-13 07:36:28
【问题描述】:

以下是我的查询,我添加了一些我想要的描述。

$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],

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

谢谢。

【问题讨论】:

  • 您需要ROW_NUMBER 或用户变量来执行此查询。
  • @Tim Biegeleisen 让我试试,感谢您抽出宝贵时间

标签: mysql sql laravel laravel-5


【解决方案1】:

这里已经回答了 statckoverflow skip frist row and take the rest

所以要使用它,你必须使用 takeskip 方法,因为有了偏移量,你就给了正确的数字。

所以首先获取count你在数据库中有多少行。

$count = Model::count()

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

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

你也可以将它与 groupBy 一起使用

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

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

它会自动从您的数据中删除给定的键

【讨论】:

  • 你也可以分组
  • 或者你可以使用except 方法来跳过第一行,例如$data = $collection->except([0,1,2]);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2012-03-29
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多