2010-02-12 155 views
1

我接管了一个包含两个表的数据库,我们将其命名为entriescommentsentries表包含一个名为comment_count的列,该列保存与中该行对应的comments中的entry_id的行数。mysql基于二级表中的行的mysql重新计算列

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

结构:

  • entries countains:
  • id | comment_count | etc
  • comments contains
  • id | blogentry_id |等

我能想到的是循环在entries表PHP中的每个条目,并单独更新,但与纯SQL的解决方案,似乎是脆弱的极端的唯一途径。

我会appriciate任何帮助!

回答

2

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

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

干杯,工作完美无瑕! =) – moodh 2010-02-12 14:28:38

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 
+0

谢谢,但我会与解决方案下,因为它是一个纯粹的更新=) – moodh 2010-02-12 14:29:10