gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:45:19 25 4
gpt4 key购买 nike

我有一张 table 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",
},

最佳答案

问题:
目前你在做 groupBy(created_at) .由于几乎所有扫描都有不同的日期时间,因此 groupBy 将无法正常工作。

解决方案:
如果我理解正确,您希望 groupBy 按 created_at 的日期没有时间。为此,您只需选择日期时间列的日期部分。有两种方法可以做到这一点:

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 have created_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"
    }
    ]
    }

    关于php - 如何在 Laravel 中创建一个返回按日期分组的数据而不重复的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63163134/

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