【问题标题】:add a column that counts rows in another table添加一个对另一个表中的行进行计数的列
【发布时间】:2013-06-20 09:22:44
【问题描述】:

我有两张桌子,一张有主题,另一张有帖子。每个帖子都有一个父线程,所以

select count(*) from posts where thread=x

会给我同一线程 x 中的帖子数量。 我想在线程表中有一个列,为每个线程提供准确的信息,但我无法想象该怎么做。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    Denormalize it,然后进行大更新:

    update thread 
    set postcount = (select count(id) from post where threadid = thread.id);
    

    从这里开始,每当添加/删除帖子时手动更新它。

    【讨论】:

      【解决方案2】:

      别这样。

      这是一个不必要的非规范化的经典示例 - 在需要时查询线程中的帖子数量应该是一个简单的练习,但要保持线程表上的数量需要更新线程表以及每次有新帖子时的帖子表。

      【讨论】:

      • 很抱歉,但我完全不同意 - 世界上的每一个论坛软件都会这样做,因为它杀死您的论坛列表必须为每个活跃主题、每个页面浏览量请求这个。这是必需非规范化的经典示例。
      【解决方案3】:

      您可以添加一个列(帖子数),并在每次在帖子表中为该特定帖子添加/删除帖子记录时更新它以获取帖子表中的记录。 是的。在这种情况下,每次都会更新两个表,但是,如果将来您想获取特定线程的帖子数,您可以查询 Thread 表,这样可以节省查询特定线程的 Post 记录的开销缓冲区,然后计数。因为,

      select count(*) from posts where thread=x
      

      首先获取缓冲区中该线程的所有记录,然后给出计数。这里将读取多条记录,因为 1 个线程可以有很多帖子。因此,在这种情况下,我们可以使用帖子数更新线程表本身,以便一次只读取 1 条记录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-09
        • 1970-01-01
        • 2014-08-29
        相关资源
        最近更新 更多