2 つのテーブルがあり、1 つはスレッド、もう 1 つはポストです。各投稿には親スレッドがあるため、
select count(*) from posts where thread=x
同じスレッド x 内の投稿の量を教えてくれます。各スレッドについて正確にこれを提供するスレッドテーブルに列を作成したいのですが、その方法を想像できません。
2 つのテーブルがあり、1 つはスレッド、もう 1 つはポストです。各投稿には親スレッドがあるため、
select count(*) from posts where thread=x
同じスレッド x 内の投稿の量を教えてくれます。各スレッドについて正確にこれを提供するスレッドテーブルに列を作成したいのですが、その方法を想像できません。
それを非正規化してから、大きな更新を実行します。
update thread
set postcount = (select count(id) from post where threadid = thread.id);
これ以降、投稿が追加/削除されるたびに手動で更新します。
特定のスレッドの投稿テーブルで投稿レコードが追加/削除されるたびに、列 (投稿数)を追加して、スレッド テーブルのレコードを更新できます。はい。この場合、毎回 2 つのテーブルが更新されますが、将来、特定のスレッドの投稿数を取得したい場合は、Thread テーブルをクエリして、特定のスレッドの Post レコードをクエリするオーバーヘッドを節約できます。バッファしてからカウントを取得します。なぜなら、
select count(*) from posts where thread=x
最初にバッファ内のそのスレッドのすべてのレコードをフェッチし、次にカウントを提供します。ここでは、1 つのスレッドに多数の投稿がある可能性があるため、複数のレコードが読み取られます。そのような場合、一度に 1 つのレコードのみが読み取られるように、スレッド テーブル自体を投稿数で更新できます。