Mysql Trigger с условием и расчетами - PullRequest
0 голосов
/ 30 апреля 2018

Я использую триггер mysql для вставки вклада из После вставки таблицы задач мне нужно рассчитать общее количество часов ( total_hours = new.hours + new. Overtime ) и мне нужно выбрать total_hours из вклад таблица

Это триггер mysql, который я использую, но он не работает

     CREATE TRIGGER update_hours AFTER INSERT ON tasks
     FOR EACH ROW 
     BEGIN
     SELECT p_id d_id hours overtime total_hours FROM contribution WHERE 
      p_id == new.p_id && d_id == new.d_id 

     new.total_hours = total_hours + new.hours + new.overtime


 INSERT INTO contribution
      ( p_id,
       d_id,
       hours,
       overtime,
       total_hours,
       contribution )
       VALUES
          ( NEW.p_id,
            NEW.d_id,
            NEW.hours,
            NEW.overtime,
            new.total_hours,
            NEW.contribution );
      END IF;

 END

Мне нужно получить значения из таблицы вклада и добавить туда значения для часов и сверхурочных

Мне нужно вставить в таблицу взносов, когда добавляешь задачу часов и сверхурочных. Нужно рассчитать общее количество часов (часы + сверхурочные) и добавить к вкладу total_hours.

1 Ответ

0 голосов
/ 30 апреля 2018

Шаг первый - получить общее количество предыдущих записей в вкладе. Шаг второй - добавить новые значения, вставленные в задачи, и добавить к итогу. Шаг третий - вставить результаты в вклад.

DELIMITER |

CREATE TRIGGER update_hours AFTER INSERT ON tasks
FOR EACH ROW 
BEGIN
    SET @old_total_hours = (SELECT SUM(hours + overtime)
        FROM contribution 
        WHERE p_id == new.p_id && d_id == new.d_id 
        GROUP BY p_id);

    SET @total_hours = @old_total_hours + new.hours + new.overtime;

    INSERT INTO contribution
    ( p_id,
    d_id,
    hours,
    overtime,
    total_hours,
    contribution )
    VALUES
    ( 
        NEW.p_id,
        NEW.d_id,
        NEW.hours,
        NEW.overtime,
        @total_hours,
        NEW.contribution
    );
END|

DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...