我有一个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
答案 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
之后。