此查询在mySQL客户端中正常工作。但是当把它放在Laravel中时,它会返回
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;
以下是代码:
$result = DB::connection('main')
->select("
SET @acc :=0;
SELECT a.date,@acc:=@acc+sum AS total_shops FROM (
SELECT DATE(created_at) AS date, SUM(IF(created_at BETWEEN '2016-08-08 17:00:00' AND '2016-09-05 16:59:59',1,0)) AS sum
FROM sales_product
WHERE status = 1
AND DATE(created_at) BETWEEN '2016-08-08 17:00:00' AND '2016-09-05 16:59:59'
GROUP BY DATE(created_at)
) AS a
");
然后我尝试删除' SET @acc:= 0'。这一次,没有错误。但结果显示total_shops为null。
结果:
array:15 [
0 => {#198
+"date": "2016-08-09"
+"total_shops": null
}
1 => {#205
+"date": "2016-08-10"
+"total_shops": null
}
2 => {#204
+"date": "2016-08-11"
+"total_shops": null
}
]
答案 0 :(得分:1)
尝试将查询字符串包装在DB::raw()
中,如下所示:
$result = DB::connection('main')->select(DB::raw("SET @acc :=0; ..."));
答案 1 :(得分:1)
为我工作。
DB::statement(DB::raw('set @rownum=0')); $orders = DB::select( DB::raw("SELECT @rownum := @rownum + 1 AS rownum,id)); $data['pacitan']=$orders;