Mysql 添加对另一个表中的行进行计数的列

Mysql 添加对另一个表中的行进行计数的列,mysql,Mysql,我有两张桌子,一张有线程,另一张有帖子。每个帖子都有一个父线程,所以 select count(*) from posts where thread=x 将给我在同一线程的帖子数量x。 我想在threads表中有一列,为每个线程提供确切的信息,但我无法想象如何做到这一点。,然后执行一次大型更新运行: update thread set postcount = (select count(id) from post where threadid = thread.id); 从现在开始,无论何

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

select count(*) from posts where thread=x
将给我在同一线程的帖子数量x。 我想在threads表中有一列,为每个线程提供确切的信息,但我无法想象如何做到这一点。

,然后执行一次大型更新运行:

update thread 
set postcount = (select count(id) from post where threadid = thread.id);
从现在开始,无论何时添加/删除帖子,都要手动更新它。

,然后执行大更新运行:

update thread 
set postcount = (select count(id) from post where threadid = thread.id);
从现在开始,无论何时添加/删除帖子,都要手动更新它。

不要这样做

这是一个典型的不必要的非规范化示例—在任何时候查询线程中的帖子数量都应该是一个简单的练习,但要在threads表中保留该数量,需要在每次有新帖子时更新threads表和posts表。

不要这样做


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

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

select count(*) from posts where thread=x

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

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

select count(*) from posts where thread=x

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

抱歉,但我完全不同意——forumsoftware的每一点在世界上这样做是因为它杀死了你的forumlisting,因为你必须为每个活动主题、每个页面视图请求它。这是一个要求非规范化的经典例子。抱歉,但我完全不同意-世界上的每一个forumsoftware都这样做,因为它杀死了你的forumlisting,因为你必须为每个活动主题请求它,ev这是一个典型的非规范化示例。