2017-05-30 19 views
0

https://stackoverflow.com/a/12772507/1507546如何使用MySQL的变量理论

我想通过理论来执行这个查询,但我发现下面的错误

[主义\ DBAL \驱动程序\ PDOException] SQLSTATE [42000 ]:语法错误或访问冲突:1064您的SQL语法错误;检查对应于您MariaDB的服务器版本正确的语法附近 使用“@counter:= 0”手动位于第1行

这里是我的代码

$sql = <<<S 
    SET @counter = 0; 
    Select sub.orderid,sub.value,(@counter := @counter +1) as counter 
    FROM 
    (
     select orderid, 
      round(sum(unitprice * quantity),2) as value 
     from order_details 
     group by orderid 
    ) sub 
    order by 2 desc 
    limit 10 
S; 

stmt = $this->_em->getConnection()->prepare($sql); 

$stmt->execute(); 

return $stmt->fetchAll(AbstractQuery::HYDRATE_ARRAY); 
+1

尝试在其他语句中添加'SET'。大多数SQL API不允许在没有额外配置的情况下在单个查询中使用多个语句。 – aynber

+0

对不起,谢谢!你可以发布你的答案,我会接受它 – smarber

回答

1

大多数SQL API的不要不需要额外配置就可以允许多个语句您需要将它们作为单独的语句传入:

$this->_em->getConnection()->exec("SET @counter = 0"); // May need tweaking, I'm not familiar with Doctrine 
$sql = <<<S 
    Select sub.orderid,sub.value,(@counter := @counter +1) as counter 
    FROM 
    (
     select orderid, 
      round(sum(unitprice * quantity),2) as value 
     from order_details 
     group by orderid 
    ) sub 
    order by 2 desc 
    limit 10 
S; 

stmt = $this->_em->getConnection()->prepare($sql);