2010-09-01 5 views
1

У меня возникают проблемы с обновлением строки в таблице со значением, выбранным из другой таблицы в MySQL Trigger. Мой Trigger выглядит следующим образомMySQL Trigger - таблица обновлений со значением, выбранным из другой таблицы

CREATE TRIGGER update_user_last_login 
    AFTER INSERT or UPDATE ON last FOR EACH ROW 
    BEGIN 
     DECLARE _user_id INTEGER; 
     SELECT user_id INTO _user_id FROM user_profile WHERE user_name = NEW.username; 
     UPDATE user set last_login = NEW.seconds WHERE id = _user_id; 
    END 

я получаю сообщение об ошибке:

ERROR 1054 (42S22): Unknown column '_user_id' in 'where clause' 

Может кто-нибудь мне точку в правильном направлении, пожалуйста?

Большое спасибо, Милан.

+1

Это старичок, но только в случае, если кто-то работает в этом. В MySQL, если вы ссылаетесь на то, что выглядит как переменная, не окружая ее, «mysql будет рассматривать ее как столбец. – ppetree

ответ

0

Вы можете вырезать промежуточную переменную, как это ...

UPDATE user 
    SET last_login = NEW.seconds 
    WHERE id = (SELECT user_id 
        FROM user_profile 
        WHERE user_name = NEW.username); 
1

Это ошибка синтаксиса в случае соединения триггера (INSERT or UPDATE). Попробуйте:

CREATE TRIGGER update_user_last_login 
    AFTER UPDATE ON last FOR EACH ROW ... 

Я не думаю, что MySQL поддерживает сложные события в одном триггере. Вы можете создать два триггера, один для после вставки и один для после обновления. Эти два триггера могут вызывать один и тот же код в двух экземплярах или вызывать общую хранимую процедуру.

0

Попробуйте как ниже

UPDATE user set last_login = NEW.seconds WHERE id = :_user_id; 
+0

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. –

Смежные вопросы