MySQL Trigger - Сравните значения двух разных таблиц - PullRequest
0 голосов
/ 21 ноября 2018

В настоящее время я борюсь с реализацией триггера в MySQL.Мой сценарий следующий:

Существуют две базы данных ( emailregistration & answers ) с другим набором идентификаторов в качестве первичного ключа.Поэтому я хочу определить правильную строку, которую необходимо обновить, используя адрес электронной почты в качестве идентификатора (который идентичен в обеих таблицах). Я хочу запустить триггер, когда база данных «регистрация» обновляется.Этот триггер затем обновляет значение в «пользователи».(представлен как подтверждено / отписано )

Проблема, насколько я понимаю, состоит в том, что нет проверки правильности строки.Мой код ниже принимает непосредственно форму phpmyadmin.В своем текущем виде оператор заполняет базу данных ответов пустыми строками и изменяет столбец, подтвержденный / отписанный по желанию, но не идентифицирующий правильную строку.

    AFTER
    UPDATE
    ------
    INSERT INTO answers (confirmed, unsubscribed)
    SELECT emailregistration.confirmed, emailregistration.unsubscribed
    FROM emailregistration
    WHERE emailregistration.email = email
    -----
    root@localhost

    *This should translate into the following trigger code:*

    CREATE TRIGGER DOI 
    AFTER UPDATE
    ON emailregistration
    FOR EACH ROW
    BEGIN
    INSERT INTO answers (confirmed, unsubscribed)
    SELECT emailregistration.confirmed, emailregistration.unsubscribed
    FROM emailregistration
    WHERE emailregistration.email = email
    END;

Надеюсь, я точно описал свою проблему.Не стесняйтесь задавать вопросы, если я не сделал.Спасибо за вашу помощь, она очень ценится.

1 Ответ

0 голосов
/ 21 ноября 2018

Может быть, что-то вроде этого

drop table if exists r,u;
create table r(email varchar(3), subscribed varchar(1), confirmed varchar(1));
create table u(email varchar(3), subscribed varchar(1), confirmed varchar(1));

insert into r (email) values('aaa'),('bbb');
insert into u (email,subscribed,confirmed) values('aaa','x','x'),('bbb','y','y');
drop trigger if exists t;
delimiter $$
CREATE TRIGGER t 
AFTER UPDATE
ON r
FOR EACH ROW
BEGIN
     update u 
        set  subscribed = new.subscribed,
              confirmed = new.confirmed
        where email = new.email;

END $$
delimiter ;

update r set subscribed = 'n' where email = 'aaa';

select * from r;

+-------+------------+-----------+
| email | subscribed | confirmed |
+-------+------------+-----------+
| aaa   | n          | NULL      |
| bbb   | NULL       | NULL      |
+-------+------------+-----------+
2 rows in set (0.00 sec)

select * from u;

+-------+------------+-----------+
| email | subscribed | confirmed |
+-------+------------+-----------+
| aaa   | n          | NULL      |
| bbb   | y          | y         |
+-------+------------+-----------+
2 rows in set (0.00 sec)

Если это не та модель, которая у вас есть, добавьте ее к вопросу вместе с ожидаемым результатом.

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