3

有两个表:文章评论。它们之间存在关联:每个评论都包含它所属的文章 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以反映相关评论的数量?

4

2 回答 2

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 上使用了它(必须把它放在架构部分),然后选择所有文章对我来说显示了正确的计数。

已更新,因此它将始终设置正确的值(您可以多次运行并在删除后等)

于 2013-08-12T23:03:05.953 回答
2

作为替代,最经典的版本:

UPDATE articles a
SET comments_count= (
    SELECT count(*)
    FROM comments c
    WHERE a.id=c.article_id
);

一些基准来比较效率?只是为了记录,我相信丹尼尔的回答更有效率。

于 2013-08-12T23:16:19.020 回答