通过聚合另一个表的数据来更新一个表

rlcwz9us  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(317)

这个问题在这里已经有答案了

mysql:用另一个表的count更新表(2个答案)
11个月前关门了。
table:
喜欢:userid,posted
用户图片:posted,username,images,likes
所有like都存储在表“likes”中,但是“user\u images”中的所有like对于所有用户都是4。有没有一种方法可以运行一个查询来更新“user\u images”表中的所有likes,以对应“likes”表中的数量。
例如,postid(5)在“likes”中有10个likes(10个userid),因此“user\u images”(5)的postid的值应该是10个likes,而不是4个。
我希望这不会太混乱。

oymdgrw7

oymdgrw71#

您可以尝试(使用事务):

BEGIN;
UPDATE user_images 
   SET likes=(SELECT count(*) 
                FROM likes 
               WHERE likes.postid=user_images.postid);

查看用户图像表中的结果,检查更新是否正确:

SELECT * FROM user_images;

如果一切正常,请提交事务:

COMMIT;

但是,如果出现问题,请执行回滚:

ROLLBACK;

和评论尝试一种新的方法。

qnyhuwrf

qnyhuwrf2#

为什么要储存一个总数?您只需在一个查询中获得任意给定帖子的最新赞数,然后完全去掉该列。
所有职位的计数:

SELECT *, (SELECT COUNT(*) FROM likes WHERE likes.postid=user_images.postid) as likes FROM user_images;

结果:

| postid | username | images | likes |
|--------|----------|--------|-------|
|      1 |    test1 |   test |     3 |
|      2 |    test2 |   test |     5 |
|      3 |    test3 |   test |     0 |

或者,如果你只需要一个特定帖子的计数,只需要一个 WHERE 子句。

SELECT *, (SELECT COUNT(*) FROM likes WHERE likes.postid=user_images.postid) as likes FROM user_images WHERE postid=2;

结果:

| postid | username | images | likes |
|--------|----------|--------|-------|
|      2 |    test2 |   test |     5 |

此方法将使您不必每次插入新的like时都更新总数,并且在不从数据库中删除所有like的情况下,您也不会意外地将所有总数设置为不正确的值。

相关问题