У меня есть 3 таблицы в моей базе данных, и все они зависят друг от друга
есть таблица проекта
+-----------+---------------------+-------------------------------------------------+
| id | project name |status (1 confirmed / 2 in progress / 3 done ) |
+-----------+---------------------+-------------------------------------------------+
| 233 | project 1 |1 |
+-----------+---------------------+-------------------------------------------------+
| 234 | project 2 | 3 |
+-----------+---------------------+-------------------------------------------------+
Таблица 2 - это категория
+-----------+---------------------+-------------------+-------------------+-------------------+
| id | category | confirmed_counter | inprogress_counter|done_counter |
+-----------+---------------------+-------------------+-------------------+-------------------+
| 1 | c++ | 2 |3 | 1 |
+-----------+---------------------+-------------------+-------------------+-------------------+
| 2 | php | 3 |4 | 6 |
+-----------+---------------------+-------------------+-------------------+-------------------+
и таблица 3 - объекты категории
+-----------+---------------------+------------+
| id | project_id | category_id|
+-----------+---------------------+------------+
| 1 | 233 | 2 |
+-----------+---------------------+------------+
| 2 | 244 | 3 |
+-----------+---------------------+------------+
Я хочу создать триггер для обновления счетчиков категории при изменении статуса проекта
когда администратор подтверждает проект, его статус изменится на 1, поэтому в таблице категорий
confirmed_counter
должен увеличиваться
но сначала я должен посмотреть на объекты категорий и посмотреть, что является категорией или категориями этого проекта, а затем обновить поле счетчика для этих категорий
$c = $project->get_categorys();
///// it returns array of that project category ids ( 2 ,3 ,4)
$sql = update `categorys` set `confirmed_counter` = confirmed_counter+1 where `id` in (2,3,4);
и когда проект выполняется
$sql = update `categorys` set `confirmed_counter` = confirmed_counter-1 , `inprogress_counter` = inprogress_counter+1 where `id` in (2,3,4);
и когда проект закончен
$sql = update `categorys` set `inprogress_counter` = inprogress_counter-1 , `done_counter` = done_counter+1 where `id` in (2,3,4);
и это не всегда в таком порядке
проект может быть сброшен во время его выполнения
поэтому перед обновлением счетчиков есть 2 важных шага
сначала я должен получить идентификатор категории проекта из третьей таблицы
тогда мне нужно увеличивать и уменьшать счетчики на основе текущего и предыдущего статуса проекта
возможно ли создать триггер для этого?
/////////////////////////////////////////////// /// edit ///////////////////////////////////
возможно ли вместо того, чтобы просто предполагать предыдущее состояние, указать это с помощью OLD в коде?
как изменение
SET
confirmed_counter =
CASE NEW.status
WHEN 1 THEN confirmed_counter + 1
WHEN 2 THEN confirmed_counter - 1
ELSE confirmed_counter
END,
до
SET
confirmed_counter =
CASE NEW.status
WHEN 1 THEN confirmed_counter + 1
ELSE confirmed_counter
END,
confirmed_counter =
CASE OLD.status
WHEN 1 THEN confirmed_counter - 1
ELSE confirmed_counter
END,
Я пытался использовать его таким образом, но всегда кажется, что последний оператор выполняется