【发布时间】:2020-07-01 16:33:31
【问题描述】:
我有一个 sql 查询如下:
SELECT count(as_user_id) as Users,
CONCAT( HOUR(created_at), ' to ', CONCAT( HOUR(created_at), ':59:59' ) ) as Time_Frame
FROM content_impression
WHERE created_at >= NOW() - INTERVAL 1 DAY
GROUP BY
DATE(created_at),
HOUR(created_at)
ORDER BY count(as_user_id) DESC
查询的结果是:
用户 | Time_Frame
- 2 | 10点到10点59分59秒
- 2 | 9点到9点59分59秒
- 1 | 11点到11点59分59秒
- 1 | 12点到12点59分59秒
我想转换成 eloquent 查询。
我也试过了,
$results = DB::table("content_impression")
->select(DB::raw(" count(as_user_id) as Users,CONCAT( HOUR(created_at), ' to ', CONCAT( HOUR(created_at), ':59:59' ) ) as Time_Frame"))
->whereRaw("created_at >= NOW() - INTERVAL 1 DAY")
->groupByRaw("DATE(created_at),HOUR(created_at)")->orderByRaw("count(as_user_id) DESC")->get();
出现如下错误;
【问题讨论】:
-
在研究了多个 stackoverflow 问题和答案后,我想到了:
$results = DB::table("as_journey_content_impression")->select(DB::raw("count(as_user_id) as Users", "CONCAT( HOUR(created_at), ' to ', CONCAT(HOUR(created_at), ':59:59') as Time_Frame"))->whereBetween('created_at',array(Carbon::now(), Carbon::now()->subDays(1))->groupBy([DB::raw('DATE(created_at)'),DB::raw('HOUR(created_at)')])->orderBy('Users','desc')->get(); -
这里列出了有助于解决此问题的链接:whereBetweensubDaysCONCATSelect count and groupBy
-
错误本身与querybuilder无关,与laravel/database配置有关。
-
See here 获取此错误消息。
标签: mysql laravel eloquent query-builder