mysql — PHP mysqli ошибка запроса, но запрос правильный

У меня есть 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

1

Решение

Ошибка довольно очевидна.

То, что у вас есть, это не SQL-запрос, а задавать из нескольких запросов.
Принимая во внимание, что mysqli_query предназначен для запуска только одного запроса.

Поэтому вы должны сделать два звонка,

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

Другие решения

Сам разобрался с ответом.
Проблема заключалась в том, как я сказал в SET @csum := 0;
Я не знаю почему, но это работает, когда я делаю CROSS JOIN (SELECT @csum:=1) c
после последнего FROM в заявлении.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector