Вы устанавливаете демон с помощью setInterval
. Ожидается поведение, о котором вы говорите. Так работает JavaScript. Его не Угловая специфичность.
SetInterval всегда возвращает идентификатор, который вы можете отслеживать в своем контроллере. Если вы хотите его уничтожить, убедитесь, что вы сделали это конкретно.
например:
greenToAmber() {
let x = 0;
$scope.myDemon = setInterval(function () {
x++;
..... Rest of code
}, 500);
}
}
//Somewhere else; where you want to destroy the interval/stop the interval:
If($scope.myDemon) {
clearInterval($scope.myDemon);
}
Вот немедленное исправление вашего запроса. Вам нужно сложить по выражению CASE
, а не наоборот.
SELECT
s.item_id,
SUM(CASE WHEN MONTH(s.date) = 1 THEN s.item_count END) AS JAN,
SUM(CASE WHEN MONTH(s.date) = 2 THEN s.item_count END) AS FEB
FROM sales s
GROUP BY
s.item_id
ORDER BY
s.item_id;
Но потенциальная проблема с этим запросом состоит в том, что для поддержки большего количества месяцев вам нужно добавить больше столбцов. Кроме того, если вы хотите охватить несколько лет, этот подход также может не масштабироваться. Предполагая, что у вас есть только несколько предметов, вот еще один способ сделать это:
SELECT
DATE_FORMAT(date, '%Y-%m') AS ym,
SUM(CASE WHEN item_id = 1 THEN item_count END) AS item1_total,
SUM(CASE WHEN item_id = 2 THEN item_count END) AS item2_total
FROM sales
GROUP BY
DATE_FORMAT(date, '%Y-%m');
Это будет генерировать вывод, похожий на:
ym item1_total item2_total
2018-01 11 5
2018-02 7 3
Какая версия вы используете, зависит от того, сколько месяцы, которые требуются в вашем отчете, по сравнению с тем, сколько элементов может появиться в ваших данных.