Обновление данных в таблице с помощью mysql-триггера

408
10 августа 2017, 22:31

Есть две таблицы: cdr и call_kontrid.

В cdr поля: calldate, dst, cnum, kontrid.
В call_kontrid поля: exten, telid, kontrid, timenow.

По умолчанию, в cdr в поле kontrid проставляется null. А в call_kontrid в поле kontrid добавляется значения.

И есть триггер, который после добавления новой строки в cdr, должен достать kontrid из таблицы call_kontrid и обновить значение в соответствующей строке в таблице cdr. Подскажите пожалуйста, как это сделать?? Вот мой код.

BEGIN
  SET @kontrid = (SELECT kontrid FROM call_kontrid 
  WHERE timenow = new.calldate AND exten = new.cnum AND telid = new.dst);
  IF(@kontrid IS NOT NULL)THEN 
    UPDATE cdr SET kontrid = @kontrid WHERE calldate = new.calldate;
  END IF;
END

Всем заранее огромное спасибо за помощь!

Answer 1
CREATE TRIGGER update_kontrid_on_cdr
BEFORE INSERT ON cdr 
FOR EACH ROW 
SET NEW.kontrid = (SELECT kontrid
                   FROM call_kontrid
                   WHERE timenow = new.calldate 
                     AND exten = new.cnum 
                     AND telid = new.dst
                  );

Данный триггер БЕЗУСЛОВНО добавит расчётное значение - даже если в запросе его задать, заданное будет заменено на расчётное. Если это не нужно, то:

CREATE TRIGGER update_kontrid_on_cdr
BEFORE INSERT ON cdr 
FOR EACH ROW 
SET NEW.kontrid = (SELECT kontrid
                   FROM call_kontrid
                   WHERE timenow = NEW.calldate 
                     AND exten = NEW.cnum 
                     AND telid = NEW.dst
                     AND NEW.kontrid IS NULL
                  );
READ ALSO
JOIN по дате с округлением

JOIN по дате с округлением

Есть таблица с полем типа DATETIME, которое хранит время и дату покупки:

358
как можно вывести индексы максимумов и минимумов в матрице?

как можно вывести индексы максимумов и минимумов в матрице?

Создать программу, которая вводит c клавиатуры двумерный массив неотрицательных целых чисел, находит минимум из максимальных элементов...

402
Выполнить действие и убить все потоки

Выполнить действие и убить все потоки

Не могу сообразить, как соорудить следующую вещь

355
Как проиграть собственный рингтон?

Как проиграть собственный рингтон?

У меня есть приложение с чатомКаждый раз, когда в чате приходит сообщение надо проигрывать определённый звук

419