这真的很简单。这是我的数据库架构:
表 1:职位
列:ID、内容、喜欢、不喜欢
表 2:posts_likes_dislikes
列:ID、user_id、post_id、like_or_dislike(1 或 0)
我想根据表 2 上的信息更新表 1 中的好恶。我想要一种将 post_id(表 2)与 id(帖子)匹配的方法,然后计算 1 和 0 的数量。基于该数量,我想更新表 1 中的好恶。我不完全确定这是否可能。尽可能地,我不想使用 cron 作业。
我会使用这样的查询:
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
请在此处查看小提琴。
编辑:如果您需要使用触发器动态更新您的帖子表,您可以使用如下解决方案:
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;
(请注意,根据数据库的结构,您可能还需要考虑更新和删除触发器)。
小提琴在这里。