1

我需要向 post.like_count 添加一个数字,其中 post.id = like.module_id !插入like表时的like.module_id定义

(post table) id user_id like_count

(如表) id module_id like

(如表触发器)

DELIMITER $$CREATE TRIGGER update_LikeCount 
AFTER INSERT ON like FOR EACH ROW  
BEGIN      
    UPDATE post SET hpost.like_count = post.like_count + 1       
    WHERE post.id = like.module_id;  
END 
$$DELIMITER ;
4

2 回答 2

1

如果不使用任何令人讨厌的小技巧,您就无法真正将参数传递给触发器(它们独立于触发它们的代码,这些代码可能来自任何地方(应用程序代码、管理控制台等))

在我看来,您可能想稍微更改您的体系结构以将用户 ID 合并到类似表中......

(我可能没有正确理解这个场景,所以如果你认为这会有所帮助,请更新更多信息!)

于 2013-08-14T09:50:22.277 回答
1

您可以使用关键字引用要插入的行的字段NEW(就像使用表名一样):

CREATE TRIGGER ...
UPDATE post SET hpost.like_count = post.like_count + 1       
WHERE post.id = NEW.module_id; 
...

请注意,OLD关键字也可用于ON UPDATEON DELETE触发器。


只是关于这个触发器的相关性的一个侧面说明。您似乎正在尝试预先计算给定帖子的“喜欢”数量。除非您的表变得非常非常大并且您的数据库非常非常繁忙,否则这样的查询应该几乎是即时的,并且可以保证始终返回准确的最新数据,而无需进行复杂的维护:

SELECT COUNT(module_id) FROM likes WHERE module_id = [the post id] ;

您可能需要重新考虑您的方法。

于 2013-08-14T10:01:23.097 回答