mysql根据辅助表中的行重新计算mysql列

时间:2010-02-12 14:03:29

标签: mysql count phpmyadmin synchronize

我接管了一个包含两个表的数据库,我们将它们命名为entriescommentsentries表包含一个名为comment_count的列,该列包含comments中与entries中该行对应的entry_id的行数。

由于代码库的版本切换,最近这种连接变得非常不同步。我需要帮助来构建一个在phpmyadmin中运行的查询,以便再次同步这些数字。 entries中的行数大约为8000,而comments中的行数大约为80000,因此运行同步查询不会有任何问题。

结构:

  • entries countains:
  • id | comment_count |等
  • comments包含
  • id | blogentry_id |等

我能想到的唯一方法是使用php循环entries表中的每个条目并单独更新,但与纯SQL解决方案相比,这似乎极其脆弱。

我会帮忙寻求帮助!

2 个答案:

答案 0 :(得分:3)

INSERT
INTO    entries (id, comment_count)
SELECT  blogentry_id, COUNT(*) AS cnt
FROM    comments
GROUP BY
        blogentry_id
ON DUPLICATE KEY
UPDATE  comment_count = cnt

答案 1 :(得分:2)

我认为纯SQL解决方案将使用子查询来调用以从条目表作为驱动程序的注释表中收集计数。类似下面的内容应该在条目表上“循环”,并且每行执行子查询(可能是不正确的术语)并将注释计数更新为辅助表的相应计数。希望有所帮助!

UPDATE   entries ent
   SET   comment_count =
         (SELECT   COUNT ( * )
            FROM   comments cmt
           WHERE   cmt.blogentry_id = ent.id)