我有两个表,一个有线程,另一个有帖子。每个帖子都有一个父线程,所以
select count(*) from posts where thread=x
会给我相同帖子x中的帖子数量。 我想在threads表中有一个列,它为每个线程提供了这个列,但我无法想象如何做到这一点。
答案 0 :(得分:1)
Denormalize it,然后进行大量更新:
update thread
set postcount = (select count(id) from post where threadid = thread.id);
从此处开始,只要添加/删除帖子,就会手动更新。
答案 1 :(得分:1)
不要这样做。
这是不必要的非规范化的经典示例 - 在任何需要的时候查询线程中的帖子数量应该是一项微不足道的练习,但要保持线程表上的数量需要更新线程表以及每当有新帖子时,帖子表。
答案 2 :(得分:1)
您可以添加列(帖子数),并在每次在该特定帖子的帖子表中添加/删除帖子记录时更新线索表中的记录。 是。在这种情况下,每次都会更新两个表,但是如果将来你想获得特定线程的帖子数量,你可以查询Thread表,这样可以节省查询特定线程的Post记录的开销。缓冲然后得到计数。因为,
select count(*) from posts where thread=x
首先在缓冲区中获取该线程的所有记录,然后给出计数。这里将读取多个记录,因为1个帖子可以有很多帖子。所以在这种情况下,我们可以用帖子的数量更新线程表本身,这样一次只能读取1条记录。