【问题标题】:mysql recount column in mysql based on rows in secondary tablemysql中的mysql recount列基于辅助表中的行
【发布时间】:2010-02-12 14:03:29
【问题描述】:

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

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

结构:

  • entriescountains:
  • id | comment_count |等等
  • comments 包含
  • id | blogentry_id |等等

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

如有任何帮助,我将不胜感激!

【问题讨论】:

    标签: mysql count phpmyadmin synchronize


    【解决方案1】:
    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
    

    【讨论】:

    • 谢谢,但我会选择下面的解决方案,因为它是一个纯粹的更新 =)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-12
      • 2013-01-26
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多