在重复键更新后插入后创建触发器

时间:2014-07-30 10:12:41

标签: mysql sql

这是表格架构(Fiddle

是否可以在INSERT INTO ON DUPLICATE KEY UPDATE声明中创建触发器?

以下是允许用户更新产品喜欢或不喜欢的查询。

更新:

$vote = $_POST["vote"]);

$query .= "INSERT INTO `product_review` (ID,user,toyid,liketype) VALUES (1,Tom,1,1)";

if($vote == 'likes')
{
  $query .= "ON DUPLICATE KEY UPDATE liketype='1'";
}

else 
{
  $query .= "ON DUPLICATE KEY UPDATE liketype='0'";
}

在查询之后,我想在表reviews上添加一个触发器来更新like / dislike字段。

我已经尝试了

CREATE TRIGGER 'after_like_update' AFTER INSERT OR UPDATE ON 'product_review'

但语法错误。

以下触发器仅在插入新行时有效:

delimiter //
CREATE TRIGGER `after_like_update` 
    AFTER INSERT ON `product_review`
    FOR EACH ROW BEGIN

    UPDATE toy a,
    (
     SELECT SUM( like_type =1 ) AS likes, SUM( like_type =0 ) AS dislikes
     FROM  `product_review` 
     WHERE post_id =  NEW.post_id
    )src
    SET a.likes = src.likes,
    a.dislikes = src.dislikes WHERE a.id =  NEW.post_id;

    END;
//

DELIMITER ;

表:

CREATE TABLE toy
    (`ID` int, `toy` varchar(21), `like` int ,`dislike` int)
;

INSERT INTO toy
    (`ID`,`toy`, `like`,`dislike`)
VALUES
    (1, 'ToyA', 2, 0),
    (2, 'ToyB',0 , 0),
    (3, 'ToyC', 0, 0),
    (4, 'ToyD', 1, 2),
    (5, 'ToyE', 0, 0),
    (6, 'ToyF', 0, 0),
    (7, 'ToyG',0, 1),
    (8, 'ToyH',0, 1),
    (9, 'ToyI', 0, 0)
;



CREATE TABLE product_review
    (`ID` int,`user` varchar(20), `toyid` varchar(21), `liketype` int)
;

INSERT INTO product_review
    (`ID`, `user`,`toyid`, `liketype`)
VALUES
    (1, 'Tom','1', 1),
    (2, 'Ben', '4',0),
    (3, 'Peter','1', 1),
    (4, 'May','4', 0),
    (5, 'May', '8',1),
    (6, 'Tom','7',0),
    (7, 'Paul','4', 1)
;

0 个答案:

没有答案
相关问题