1

我有大约 50000 条记录,我正在使用服务器端处理的 Datatable 中显示它们。在我的查询中,我正在使用and方法应用该groupBy()方法。skip()take()

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

如果限制为 10,它应该返回 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 组。

4

3 回答 3

0

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

于 2019-01-25T09:57:56.860 回答
0

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

在您的情况下,您在获取记录后进行分组。

DB::table('actions')
    ->whereBetween('timestamp', array($dates['startDate'], $dates['endDate']))
    ->where('shop_name', $shopName)
    ->groupBy('product_id')
    ->skip($start)
    ->take(10)
    ->get()
于 2019-01-25T10:00:21.873 回答
0
DB::table('actions')
            ->whereBetween('timestamp', array($dates['startDate'], $dates['endDate']))
            ->where('shop_name', $shopName)
            ->get()
            ->groupBy('product_id')
            ->splice($start,$rowperpage);

这个命令奏效了。

于 2019-01-25T10:30:11.383 回答