PHP mysqli查询错误但查询正确

时间:2017-08-09 09:44:37

标签: php mysql mysqli

我有一个MySQL查询,可以在SequelPro中正确执行,但不会在PHP Mysqli中执行。显示的消息:

  

执行停止。   消息:执行sql-statement时发生错误:SET @csum:= 0;选择kunde,sales,(@csum:= @csum + cr.sales)作为cumulative_sales FROM(和整个查询(在这里打印太长时间)

我在Sequel PRo中尝试了几次并且它有效。 并且查询存储在变量$ toBeExecuted中 也打印出来检查它是否正确。

return mysqli_query($this->connectionTargetDB, $toBoExecuted);

我猜这是SET @csum:= 0

的问题

/编辑 整个查询:

SET @csum := 0;
select kunde, sales, (@csum := @csum + cr.sales) as cumulative_sales
  FROM (
SELECT j.kunde as kunde,
       ROUND(SUM(m.ausgangsrechnungen - m.eingangsrechnungen), 2) as sales
  FROM jobs_per_month m,
       jobs j,
       temporal_dates t
 WHERE day(t._date) = 1
   AND (t._date BETWEEN date_add(now(), INTERVAL -12 MONTH) and now())
   AND m.monat = month(t._date)
   AND m.jahr = year(t._date)
   AND j.internal_jobnr = m.internal_jobnr
 GROUP BY j.kunde
HAVING sales >= 10000
 UNION ALL
SELECT concat(COUNT(r.sales), ' Kunde < 10k') as kunde,
       ROUND(SUM(r.sales), 2) as sales
  FROM (SELECT j.kunde as kunde,
       ROUND(SUM(m.ausgangsrechnungen - m.eingangsrechnungen), 2) as sales
  FROM jobs_per_month m,
       jobs j,
       temporal_dates t
 WHERE day(t._date) = 1
   AND (t._date BETWEEN date_add(now(), INTERVAL -12 MONTH) and now())
   AND m.monat = month(t._date)
   AND m.jahr = year(t._date)
   AND j.internal_jobnr = m.internal_jobnr
 GROUP BY j.kunde
HAVING sales < 10000 AND sales > 0) r
 ORDER by sales desc) cr

2 个答案:

答案 0 :(得分:1)

错误非常明显。

这里有的不是SQL查询,而是多个查询的 而mysqli_query只能运行一个查询。

因此你应该打两个电话,

$this->connectionTargetDB->query("SET @csum := 0");
return $this->connectionTargetDB->query($toBoExecuted);

答案 1 :(得分:0)

自己想出答案。 问题就像我在SET @csum := 0;中所说的那样 我不知道为什么但是当我做CROSS JOIN (SELECT @csum:=1) c时它可以工作 在声明中的最后一个FROM之后。