为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Laravel 中创建一个返回按日期分组且不重复的数据的查询

如何在 Laravel 中创建一个返回按日期分组且不重复的数据的查询

PHP
猛跑小猪 2023-09-08 10:36:47
我的数据库中有一个表scans,其中记录了用户的扫描活动,并且用户一天可以进行多个活动。我正在寻找获取特定用户在几天内所有扫描的总和的最佳方法。我已经在代码中尝试了以下操作,但我想我遗漏了一些东西,因为我想聚合当天进行的用户的扫描。 DB::table('scans')->select(DB::raw('count(*) as total, scanner, created_at'))->where('scanner', 'Jon Snow')->groupBy('created_at')->get()=> Illuminate\Support\Collection {#3313     all: [       {#3304         +"total": 1,         +"scanner": "Jon Snow",         +"created_at": "2020-07-26 19:43:58",       },       {#3321         +"total": 1,         +"scanner": "Jon Snow",         +"created_at": "2020-07-26 19:32:40",       },       {#3327         +"total": 1,         +"scanner": "Jon Snow",         +"created_at": "2020-07-28 19:44:18",       },       {#3323         +"total": 1,         +"scanner": "Jon Snow",         +"created_at": "2020-07-28 20:30:30",       },所以代替这个:       {#3304         +"total": 1,         +"scanner": "Jon Snow",         +"created_at": "2020-07-26 19:32:58",       },       {#3321         +"total": 1,         +"scanner": "Jon Snow",         +"created_at": "2020-07-26 19:43:40",       },我想要这个:       {#3304         +"total": 2,         +"scanner": "Jon Snow",         +"created_at": "2020-07-26",       },       {#3304         +"total": 5,         +"scanner": "Jon Snow",         +"created_at": "2020-07-28",       },
查看完整描述

1 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

问题:

目前您正在执行groupBy(created_at)。由于几乎所有扫描都有不同的日期时间,因此 groupBy 将无法按预期工作。


解决方案:

如果我理解正确的话,您需要按 create_at 的日期进行 groupBy 而不需要时间。为此,您必须仅选择日期时间列的日期部分。有两种方法可以做到这一点:

DB::raw('count(*) as total, DATE_FORMAT(created_at, "%Y-%m-%d") as someDate, scanner')
->where('scanner', 'Jon Snow')
->groupBy('someDate')
->get()

@编辑

你也可以这样做DATE(created_at) as someDate


例子:

我的数据库中插入了 4 个用户:

  • 2 个已创建_at => '2020-05-05 10:10:10'

  • 2 个已创建_at => '2020-10-10 10:10:10'

结果:

Illuminate\Support\Collection {#1945

  #items: array:2 [

    0 => {#1952

      +"count": 2

      +"new_date": "2020-05-05"

    }

    1 => {#2092

      +"count": 2

      +"new_date": "2020-10-10"

    }

  ]

}


查看完整回答
反对 回复 2023-09-08
  • 1 回答
  • 0 关注
  • 51 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信