INSERT
にMySQLトリガーを作成したい場合:wp_posts
テーブルに新しいレコードが挿入されたら、wp_posts.post_author
を更新して、2つのサブクエリを使用してデータを取得しますより良く行われます)。MySQLのトリガーと条件付きアップデート
とにかく、更新は「条件付き」である必要があります。つまり、wp_posts.post_title
の値が「A」、「B」または「C」の場合にのみ行を更新する必要があります。これは可能ですか?
これは私が試したものです:
CREATE TRIGGER updatePostIDonInsert
AFTER INSERT
ON wp_posts FOR EACH ROW
BEGIN
-- variable declarations
-- trigger code
// ? (pseudo: if wp_posts.post_title IN ("A","B","C") then...)
UPDATE wp_posts SET post_author =
(SELECT ID from wp_users WHERE user_email =
(SELECT meta_value FROM `wp_postmeta` WHERE post_id = wp_posts.ID AND meta_key = "_from_email"))
END;
すべてのヘルプは
を高く評価している[UPDATE]私が試した最新のクエリ:
CREATE TRIGGER updatePostIDonInsert
BEFORE INSERT
ON wp_posts FOR EACH ROW
BEGIN
IF FIND_IN_SET(NEW.post_title,'General contact,Website contact,Master contact') > 0 AND NEW.post_type ='inbound_com' THEN
SET NEW.post_author = (SELECT ID from wp_users WHERE user_email = (SELECT meta_value FROM wp_postmeta WHERE post_id = NEW.ID AND meta_key = '_from_email'));
END IF;
END;
(phpMyAdminにトリガー部を介して挿入された場合は、この作品最終ENDはなく、IFから開始)
私はあなたが挿入トリガーを行っている同じテーブルを更新することはできないと思う、あなたができることは、トリガーを挿入してpost_authorの値を変更するので、変更された値が他の値あなたの挿入クエリ。 SET NEW.post_author = <ここの値>は、値がサブクエリから来る場合は単一レコードを返すべきです。 – Learning
これを指摘してくれてありがとう(私は非常に新しいトリガーで、一般的にはdbsで動作しません) –
挿入するvalueofフィールドにアクセスするには、NEWキーワードを使用する必要があります。すなわちIF FIND_IN_SET(NEW.post_title、 'A、B、C、D')> 0。代わりに[FIND_IN_SET](http://www.w3resource.com/mysql/string-functions/mysql-find_in_set-function.php)関数を使用してください – Learning