ОШИБКА # 1054 - Неизвестный столбец 'program_id' в 'NEW - PullRequest
0 голосов
/ 10 июля 2019

Пытаться достичь -

Я пытаюсь обновить color_status в tb_sites_3 (3 будет динамическим на основе program_id, который мы получим из tb_tickets) Всякий раз, когда в tb_jobs делается какая-либо вставка.

ОШИБКА

При создании триггера я получаю следующую ошибку ОШИБКА # 1054 - Неизвестный столбец 'program_id' в 'NEW'

tb_tickets tb_tickets

tb_jobs

enter image description here

tb_sites_3

enter image description here

DELIMITER //
    CREATE TRIGGER trig_job_color
           BEFORE INSERT ON `tb_jobs`
           FOR EACH ROW 
    BEGIN
    SET NEW.program_id = (Select program_id from tb_tickets
    where tb_tickets.job_id = NEW.job_id);
    SET NEW.status = (Select status from tb_tickets
    where tb_tickets.job_id = NEW.job_id);

     CASE NEW.program_id
     WHEN 1 THEN
       UPDATE tb_sites_1 
       SET color_status = NEW.status 
       WHERE site_id = NEW.site_id;
     WHEN 2 THEN
       UPDATE tb_sites_2 
       SET color_status = NEW.status 
       WHERE site_id = NEW.site_id;
     WHEN 3 THEN
       UPDATE tb_sites_3
       SET color_status = NEW.status 
       WHERE site_id = NEW.site_id;
     END CASE;
    END //
    DELIMITER ;

Таблица определений

tb_tickets

CREATE TABLE `tb_tickets` (
 `id` int(15) NOT NULL,
 `ticket_id` int(15) NOT NULL,
 `job_id` int(11) NOT NULL,
 `site_id` varchar(200) NOT NULL,
 `program_id` int(11) NOT NULL,
 `status` varchar(200) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

tb_jobs

CREATE TABLE `tb_jobs` (
 `job_id` int(11) NOT NULL AUTO_INCREMENT,
 `job_creation` date DEFAULT NULL,
 PRIMARY KEY (`job_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1

tb_sites_3

CREATE TABLE `tb_sites_3` (
 `id` int(15) NOT NULL AUTO_INCREMENT,
 `color_status` int(15) NOT NULL,
 `site_id` varchar(200) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

Ответы [ 2 ]

1 голос
/ 10 июля 2019

CREATE TRIGGER trig_job_color ПОСЛЕ ВСТАВКИ НА tb_jobs ДЛЯ КАЖДОГО РЯДА НАЧИНАЮТСЯ SET @program_id = (Выбрать program_id из tb_tickets где tb_tickets.job_id = NEW.job_id);

SET @newstatus = (Select status from tb_tickets
where tb_tickets.job_id = NEW.job_id);
SET @newsite_id = (Select site_id from tb_tickets
where tb_tickets.job_id = NEW.job_id);

CASE @program_id
 WHEN 1 THEN
   UPDATE tb_sites_3 
   SET tb_sites_3.color_status = @newstatus 
   WHERE tb_sites_3.site_id = @newsite_id;
 WHEN 2 THEN
   UPDATE tb_sites_3 
   SET tb_sites_3.color_status = @newstatus 
   WHERE tb_sites_3.site_id = @newsite_id;
 WHEN 3 THEN
   UPDATE tb_sites_3
   SET tb_sites_3.color_status = @newstatus 
   WHERE tb_sites_3.site_id = @newsite_id;
 END CASE;
 END
0 голосов
/ 10 июля 2019

Это сработало для меня, используя переменные.

DELIMITER //
    CREATE TRIGGER trig_job_color
           AFTER INSERT ON `tb_jobs`
           FOR EACH ROW 
    BEGIN
    DECLARE x, y INT DEFAULT 0;
    DECLARE z varchar(50);
    SET x = (Select program_id from tb_tickets
    where tb_tickets.job_id = NEW.job_id);
    SET y = (Select status from tb_tickets
    where tb_tickets.job_id = NEW.job_id);
    SET Z = (Select site_id from tb_tickets
    where tb_tickets.job_id = NEW.job_id);
     CASE x
     WHEN 1 THEN
       UPDATE tb_sites_1 
       SET color_status = y
       WHERE site_id = z;
     WHEN 2 THEN
       UPDATE tb_sites_2 
       SET color_status = y
       WHERE site_id = z;
     WHEN 3 THEN
       UPDATE tb_sites_3
       SET color_status = y 
       WHERE site_id = z;
     END CASE;
    END //
    DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...