Laravel不能使用' SET'在原始SQL查询?

时间:2016-09-11 06:39:57

标签: php mysql laravel

此查询在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
    }
]

2 个答案:

答案 0 :(得分:1)

尝试将查询字符串包装在DB::raw()中,如下所示:

$result = DB::connection('main')->select(DB::raw("SET @acc :=0; ..."));

答案 1 :(得分:1)

为我工作。

  1. 创建声明
  2. 在第二个原始查询中调用该语句
  3. DB::statement(DB::raw('set @rownum=0'));
    $orders = DB::select( DB::raw("SELECT @rownum  := @rownum  + 1 AS rownum,id)); 
    
    $data['pacitan']=$orders;