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

标签 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(帖子)进行匹配,然后计算 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

请参阅 fiddle 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;

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

fiddle 是 here .

关于mysql - 根据MySQL中另一个表的数据自动更新列中字段的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16998543/

相关文章:

PHP PDO 表不更新数据

php - 数据库代码未在使用 php 的聊天程序中连接

sql - 如何使用生成多行的 select 语句更新表?

MySQL 作为服务未运行

c++ - cpp 快速访问磁盘上的二进制数据

mysql - SQL查询多表

mysql - 添加多个外键报错

sql - 如何对主索引重新编号

MySQL如何在一个没有公共(public)键的情况下连接3个表

database - 您知道任何好的分布式数据库系统吗?