У меня есть проблема с получением кумулятивной суммы за месяц с PDO / MySQL, php 7.0 и mysql 5.5.
С несколькими запросами я получил " Превышение: SQLSTATE [HY000]: Общая ошибка VAR " как ошибка. Если я удаляю эти строки «SET», они исчезают, но я не могу получить то, что пытаюсь сделать.
$sql = "
SET @accInc := 0;
SET @accOut := 0;
SELECT
q1.y as year,
q1.m as month,
(@accInc := @accInc + q1.income) AS accInc,
(@accOut := @accOut + q1.outgo) AS outInc
FROM
(SELECT
YEAR(`date`) AS y,
MONTH(`date`) AS m,
SUM(CASE WHEN amount > 0 THEN amount ELSE 0 END) as income,
SUM(CASE WHEN amount < 0 THEN amount ELSE 0 END) as outgo
FROM `transaction`
GROUP BY y, m
ORDER BY y, m
) AS q1";
require("./pdo.php");
try {
$req = $db->prepare($sql);
$req->execute();
$data = $req->fetchAll(PDO::FETCH_ASSOC);
foreach($data as $row) {
$acc[$row["year"]][$row["month"]] = array(
"inc" => (float)$row["accInt"],
"out" => (float)$row["accOut"]
);
}
} catch(PDOException $except) {
printf("Excention : %s", $except->getMessage());
}
Спасибо.
Редактировать : Я должен был установить $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
И изолировать SET
команду. Теперь это работает.