2012-05-07 8 views
0

質問:

UPDATE/INSERTトリガNEW変数に列の値を選択する際に使用する正しい構文は何ですか?MySQLのトリガーでNEW列/変数にクエリから単一の値をコピー

詳細:ここ

は、[単純化]私が使用していたテーブルと同様にクエリです。この例の目的のために、私は再帰的なもの、この場合はコメントを選択しました(つまり、画像にコメントするだけでなくコメントにもコメントを付けることができます)。いつでも私はコメントのコメントが何であるか知りたいですが、テーブルにn回質問してその画像にアクセスしたくないので(なぜを拒否しているのですか)、私は挿入時にトリガーを持っていますターゲット画像をコピーします。

PICTURESテーブル:

CREATE TABLE IF NOT EXISTS pictures 
(
    id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (id) 
) 

コメント表:

CREATE TABLE IF NOT EXISTS comments 
(
    id INT NOT NULL AUTO_INCREMENT, 
    picture_id INT NOT NULL, 
    comment_id INT NOT NULL, 
    PRIMARY KEY (id), 
    FOREIGN KEY (picture_id) REFERENCES pictures (id), 
    FOREIGN KEY (comment_id) REFERENCES comments (id) 
) 

コメントトリガー:NEW.comment_idNEW.picture_idNOT NULLあること注意、従って、それらは(FALSE)がゼロにデフォルト。私の実際のプログラムでは、XORは、画像とコメントidの両方を割り当てる無効な試みを拒否しています。

CREATE TRIGGER bi_comments_fer BEFORE INSERT ON comments FOR EACH ROW 
BEGIN 
    IF (NEW.comment_id) 
    THEN 
     select NEW.picture_id := picture_id from comments where id = NEW.comment_id; 
    END IF; 
END 

私はそう

select @NEW.picture_id := picture_id from comments where id = NEW.comment_id; 

のように、@符号を含めてみましたしかし、また、シンタックスエラーを上げたこと。誰も私にこれを修正する方法を教えてもらえますか?

答えて

2
SET NEW.picture_id := (SELECT picture_id FROM comments WHERE id = NEW.commend_id); 
+0

「SELECT」が複数の値を返した場合(つまり、「id」が「UNIQUE」でなかった場合)はどうなるでしょうか?宇宙は崩壊するだろうか? – puk

+0

@puk:複数の値を期待していない代入演算子の行に沿ってエラーが発生します...私の頭の上からそのままそれを思い出すことはできません。 – eggyal

関連する問題