有两个表:文章和评论。它们之间存在关联:每个注释包含它所属的文章ID 。
-----------------------------
articles
----+-------+----------------
id | title | comments_count
----+-------+----------------
1 | aaa | 0
2 | bbb | 0
3 | ccc | 0
4 | ddd | 0
5 | eee | 0
6 | fff | 0
...
-------------------------------
comments
----+-------------+------------
id | text | article_id
----+-------------+------------
1 | aaa comment | 1
2 | aaa comment | 1
3 | fff comment | 6
4 | bbb comment | 2
5 | ddd comment | 4
6 | bbb comment | 2
文章表还有一个列,用于保存关联的评论的当前计数。 这是一个SQLFiddle,其中包含所描述表格的基本设置。
导入了大量文章和评论之后,如何更新每个文章上的 comments_count 反映相关评论的数量?
答案 0 :(得分:4)
尝试此查询:
UPDATE articles a
LEFT JOIN (
SELECT
article_id,
count(*) as count
FROM comments
GROUP BY article_id
) AS b
ON a.id = b.article_id
SET comments_count = COALESCE(b.count, 0);
我在你的sqlfiddle上使用它(必须把它放在架构部分),然后选择所有文章显示正确的计数。
已更新,因此它将始终设置正确的值(您可以多次运行并在删除后运行等)
答案 1 :(得分:2)
作为替代方案,最常见的经典版本:
UPDATE articles a
SET comments_count= (
SELECT count(*)
FROM comments c
WHERE a.id=c.article_id
);
一些基准比较效率?只是为了记录,我确信丹尼尔的答案更有效率。