Laravel 查询生成器 GROUP BY 方法以及 SKIP 和 TAKE 方法

Laravel query builder GROUP BY method alongside with SKIP and TAKE methods

我有大约 50000 条记录,我在服务器端处理的数据表中显示它们。 在我的查询中,我将 groupBy() 方法与 skip()take() 方法一起应用。

我希望能够在groupBy()之后应用限制,例如

如果限制是 10,它应该 return 10 个组而不是 10 个记录。

DB::table('actions')->whereBetween('timestamp', 
array($dates['startDate'], $dates['endDate']))
->where('shop_name', $shopName)
->skip($start)
->take(10)
->get()
->groupBy('product_id');

通过这个查询,我得到了 10 条记录,而不是 10 个组。

尝试在查询的最后但在 get().

之前省略 take(10) 并添加 limit(10)

您的查询语句顺序错误。以下应该可以解决问题。请注意 groupBy()take()get() 之前。

在您的例子中,您是在获取记录后进行分组。

DB::table('actions')
    ->whereBetween('timestamp', array($dates['startDate'], $dates['endDate']))
    ->where('shop_name', $shopName)
    ->groupBy('product_id')
    ->skip($start)
    ->take(10)
    ->get()
DB::table('actions')
            ->whereBetween('timestamp', array($dates['startDate'], $dates['endDate']))
            ->where('shop_name', $shopName)
            ->get()
            ->groupBy('product_id')
            ->splice($start,$rowperpage);

这个命令奏效了。