大規模なフォーラムソフトウェアの多くは、追跡テーブルを使用して、誰が何を読んだかを把握しています。これは、次のようなものです(大幅に簡略化されています)。
CREATE TABLE topic_tracking (
user_id INT NOT NULL,
topic_id INT NOT NULL,
last_visit DATETIME NOT NULL,
PRIMARY KEY (user_id, topic_id)
)
次に、このテーブルの結合を使用して、表示している投稿が読み取られているかどうかを確認します。スレッドをページングするため、追加のクエリは比較的少なくなります(1ページに表示する投稿の数によって異なります)。
ユーザーがスレッドにアクセスしたら、この追跡テーブルをアクセスのタイムスタンプで更新します。次に、スレッドリンクを表示するときに、このテーブルをチェックして、last_visitがスレッドの最後の投稿よりも早いかどうかを確認します。これにより、「新しい」スレッドだけでなく、「更新された」スレッドも表示できます。