2010-09-01 11 views
1

Je rencontre des problèmes lors de la mise à jour d'une ligne dans une table avec une valeur sélectionnée dans une autre table de MySQL Trigger. Mon Trigger ressemble à ceciMySQL Trigger - mise à jour de la table avec la valeur sélectionnée à partir d'une autre table

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 

Je reçois un message d'erreur:

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

Quelqu'un pourrait-il me indiquer la bonne direction s'il vous plaît? Merci beaucoup, Milan.

+1

C'est un oldie mais juste au cas où quelqu'un d'autre court dans ce. En MySQL, si vous faites référence à ce qui ressemble à une variable sans l'entourer de '' mysql la traitera comme une colonne. – ppetree

Répondre

0

Vous pouvez découper la variable intermédiaire comme celui-ci ...

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

Ceci est une erreur de syntaxe sur l'événement déclencheur du composé (INSERT or UPDATE). Essayez:

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

Je ne pense pas MySQL prend en charge les événements composés dans le même déclencheur. Vous pouvez créer deux déclencheurs, un après l'insertion et un après la mise à jour. Ces deux déclencheurs peuvent appeler le même code en double ou appeler une procédure stockée commune.

0

Essayez comme ci-dessous

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

Bien que cet extrait de code puisse résoudre la question, [y compris une explication] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) contribue vraiment à améliorer la qualité de votre message. Rappelez-vous que vous répondez à la question pour les lecteurs dans le futur, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. –