0

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

select count(*) from posts where thread=x

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

4

3 回答 3

1

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

select count(*) from posts where thread=x

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

于 2013-06-20T12:44:52.637 回答
1

对其进行非规范化,然后进行大更新运行:

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

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

于 2013-06-20T09:25:42.257 回答
1

不要这样做。

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

于 2013-06-20T09:30:25.940 回答