根据MySQL中另一个表中的数据自动更新列中字段的数量

时间:2013-06-08 10:26:39

标签: mysql sql database schema

真的很简单。这是我的数据库架构:

表1:帖子

列:ID,内容,喜欢,不喜欢

表2:posts_likes_dislikes

列:ID,user_id,post_id,like_or_dislike(1或0)

我想根据表2中的信息更新表1中的喜欢和不喜欢。我想要一种方法将post_id(表2)与id(posts)匹配,然后计算1和0的数量。根据这个数额,我想更新表1中的喜欢和不喜欢。我不完全确定这是否可行。尽可能地,我不想使用cron作业。

1 个答案:

答案 0 :(得分:1)

我会使用这样的查询:

UPDATE
  posts INNER JOIN (SELECT   post_id,
                             SUM(like_or_dislike=1) likes,
                             SUM(like_or_dislike=0) dislikes
                    FROM     posts_likes_dislikes
                    GROUP BY post_id) l
  ON posts.ID = l.post_id
SET
 posts.likes = l.likes,
 posts.dislikes = l.dislikes

请参阅小提琴here

编辑:如果您需要使用触发器动态更新帖子表,则可以使用以下解决方案:

CREATE TRIGGER after_insert
BEFORE INSERT ON posts_likes_dislikes
FOR EACH ROW
  UPDATE posts
  SET
    posts.likes = posts.likes + (new.like_or_dislike=1),
    posts.dislikes = posts.dislikes + (new.like_or_dislike=0)
  WHERE
    posts.ID = new.post_id;

(请注意,根据数据库的结构,您可能还需要考虑更新和删除触发器。)

小提琴是here