Mysql 如何将sql查询转换为laravel queryBuilder
我有一个sql查询,如下所示:Mysql 如何将sql查询转换为laravel queryBuilder,mysql,laravel,eloquent,query-builder,Mysql,Laravel,Eloquent,Query Builder,我有一个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(creat
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
查询结果为:
用户|时间|框架
- 2 | 10至10:59:59
- 2 | 9至9:59:59
- 1 | 11至11:59:59
- 1 | 12至12:59:59
$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();
错误如下所示
像这样尝试:
where('created_at','>=',now()->subDay(1))
代替whereRaw(“created_at>=now()-INTERVAL 1 DAY”)
groupBy('Time\u Frame')
,因为错误告诉您按groupBy
选择的列,该列名为Time\u Frame
而非日期(创建时间)、小时(创建时间)
latest('Users')
而不是orderByRaw(“count(as_user\u id)DESC”)
并在orderBy
中使用您定义的别名(Users
),而不是count(as_user\u id)
在深入研究了多个stackoverflow问题和答案后,我得出了以下结论:
$results=DB::table(“as_-travely\u-content\u-impression”)->选择(DB::raw(“count(as_-user\u-id)as-Users”),“CONCAT(HOUR(created_-at)”,“to”,“CONCAT(HOUR(created_-at)”,“:59:59”)作为时间框架”)->两者之间的位置(“created_-at”,“array”(Carbon::now(),Carbon::now(),Carbon::now())->subDays(1))->groupBy([DB::raw('DATE(created_at')),DB::raw('HOUR(created_at')))->orderBy('Users','desc')->get();
下面列出了一些有助于解决此问题的链接:错误本身与querybuilder无关,而与laravel/数据库配置有关。对于此错误消息。
$results = DB::table("content_impression")
->selectRaw(" count(as_user_id) as Users,CONCAT( Hour(created_at), ' to ', CONCAT( Hour(created_at), ':59:59' ) ) as Time_Frame")
->where('created_at','>=',now()->subDay(1))
->groupBy('Time_Frame')->latest('Users')->get();