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

我的数据库中有一个表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",

       },


猛跑小猪
浏览 73回答 1
1回答

白猪掌柜的

问题:目前您正在执行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"    }  ]}
打开App,查看更多内容
随时随地看视频慕课网APP