gpt4 book ai didi

php - 将 groupBy() 与 orderBy() 和 limit() 一起使用

转载 作者:行者123 更新时间:2023-11-30 21:42:22 24 4
gpt4 key购买 nike

我有一个包含 1000 多个 Assets 记录的数据库表,每个 Assets 可以有 1000 个条目。

例如:

ID         ASSET_ID  MANY_COLUMNS_OF_DATA  CREATED_AT
1 345 Stuff 2018-04-01....
....
200 946 Stuff .....
...
3000 345 Stuff 2018-05-01....
....
1000000 925 Stuff 2018-05-01....

在一次通话中我希望能够:

  1. 指定我需要的 ASSET_ID。 whereIn() 我相信。
  2. 按 ASSET_ID 对结果进行分组
  3. 仅在特定日期或之前获取这些记录
  4. 以相反的日期顺序获取它们。我相信我可以使用 orderBy('id', 'desc)。
  5. 为每个 ASSET_ID 获取特定数量的记录

我可能需要返回任意数量的 Assets ,从 1 到 n。

我试过各种方法,但出现了问题,因为我只返回了一条记录。

例如:

        USING THE DB FACADE
$data = DB::table( 'table' )
->whereIn( 'asset_id', $assetIDs )
->groupBy( 'asset_id' )
->having( 'created_at', '<=', $this->dateINeed )
->limit( $numberOfRowsINeed )
->get();

USING ELOQUENT
$data = $modelToRead->whereIn( 'asset_id', $assetIDs )
->groupBy( 'asset_id' )
->where( 'created_at', '<=', $this->dateINeed )
->orderBy( 'id', 'desc' )
->take( $numberOfRowsINeed )
->get();

所以我想要返回的是一组数据,其中分别列出了每个 Assets 的记录,例如:

$data = [
'345' => [
.....
.....
],
'234' => [
.....
.....
],
'123' => [
.....
.....
],
'etc' => [
.....
.....
],
]

如有任何帮助,我们将不胜感激。

谢谢。

最佳答案

SQL 分组用于聚合数据,而不是用于组织输出。

删除查询生成器 groupBy 方法调用 (SQL),获取所需的所有行,并返回一个集合。

$collection = $model->...->get();

然后使用采集方式groupBy按 Assets ID 组织所有集合。

$grouped = $collection->groupBy('asset_id');

关于php - 将 groupBy() 与 orderBy() 和 limit() 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50979758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com