У меня есть MySQL Query, который выполняется правильно в SequelPro, но не выполняется в PHP Mysqli. Сообщение, которое отображается:
Казнь остановлена.
Сообщение: произошла ошибка при выполнении оператора sql: 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
Ошибка довольно очевидна.
То, что у вас есть, это не SQL-запрос, а задавать из нескольких запросов.
Принимая во внимание, что mysqli_query предназначен для запуска только одного запроса.
Поэтому вы должны сделать два звонка,
$this->connectionTargetDB->query("SET @csum := 0");
return $this->connectionTargetDB->query($toBoExecuted);
Сам разобрался с ответом.
Проблема заключалась в том, как я сказал в SET @csum := 0;
Я не знаю почему, но это работает, когда я делаю CROSS JOIN (SELECT @csum:=1) c
после последнего FROM
в заявлении.