0

2 つのテーブルがあり、1 つはスレッド、もう 1 つはポストです。各投稿には親スレッドがあるため、

select count(*) from posts where thread=x

同じスレッド x 内の投稿の量を教えてくれます。各スレッドについて正確にこれを提供するスレッドテーブルに列を作成したいのですが、その方法を想像できません。

4

3 に答える 3

1

それを非正規化してから、大きな更新を実行します。

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

これ以降、投稿が追加/削除されるたびに手動で更新します。

于 2013-06-20T09:25:42.257 に答える
1

特定のスレッドの投稿テーブルで投稿レコードが追加/削除されるたびに、列 (投稿数)を追加して、スレッド テーブルのレコードを更新できます。はい。この場合、毎回 2 つのテーブルが更新されますが、将来、特定のスレッドの投稿数を取得したい場合は、Thread テーブルをクエリして、特定のスレッドの Post レコードをクエリするオーバーヘッドを節約できます。バッファしてからカウントを取得します。なぜなら、

select count(*) from posts where thread=x

最初にバッファ内のそのスレッドのすべてのレコードをフェッチし、次にカウントを提供します。ここでは、1 つのスレッドに多数の投稿がある可能性があるため、複数のレコードが読み取られます。そのような場合、一度に 1 つのレコードのみが読み取られるように、スレッド テーブル自体を投稿数で更新できます。

于 2013-06-20T12:44:52.637 に答える