Laravel 查询生成器按天计算行数 SQL db::raw

Posted

技术标签:

【中文标题】Laravel 查询生成器按天计算行数 SQL db::raw【英文标题】:Laravel query builder count rows by day SQL db::raw 【发布时间】:2021-06-01 08:33:56 【问题描述】:

我有一个 Laravel 8 应用程序,我需要计算每天的总应用程序数量并以最有效的方式输出数据计数,例如,第一天有 500 个应用程序,第二天有 1,000 个应用程序,然后第四,取决于每天有多少应用程序。

我使用DB::raw() 来计算我的行数,但是,Laravel 的时间戳默认包括小时、分钟和秒作为日期的一部分,所以这对我不起作用,我需要格式化排除此日期并仅包含日期。

我的查询似乎没有返回任何内容,也没有错误,所以我认为我的第一个 DB::raw() 有问题,它似乎根本没有格式化 created_at 列,这是什么我失踪了?

Application::whereBetween('created_at', [$from, $to])
           ->select(DB::raw('DATE_FORMAT("created_at, %Y-%m-%d")'), DB::raw('count(*) as applications'))
           ->groupBy('created_at')
           ->get();

【问题讨论】:

【参考方案1】:

你可以使用 groupByRaw()

Application::whereBetween('created_at', [$from, $to])
           ->select(DB::raw('DATE_FORMAT(created_at, "%Y-%m-%d")'), DB::raw('count(*) as applications'))
           ->groupByRaw('DATE_FORMAT(created_at, "%Y-%m-%d")')
           ->get();

另外,您可以使用 selectRaw() 代替 select(DB::raw)

【讨论】:

我得到的错误是:Syntax error or access violation: 1582 Incorrect parameter count in the call to native function 'DATE_FORMAT' 数据库中的 created_at 是 Laravel 的默认格式,为:2021-06-01 09:10:42 那是select,请改成DATE_FORMAT(created_at, "%Y-%m-%d")

以上是关于Laravel 查询生成器按天计算行数 SQL db::raw的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel 查询数据并按天分组

Laravel如何根据查询按天渲染成融合图表

Laravel 查询构建器 - 查询不工作但在 SQL 控制台中工作

按天分组的 SQL 查询

SQL IF 存在日期按天做增量更新否则插入数据

Laravel Eloquent按天分组结果