8

私は php/mysql でコーディングしたユーザー ディスカッション フォーラムを持っています。通常、リソースをほとんど使用せずにスレッドの横にあるアイコン イメージを変更することで、どのトピックに新しい投稿があるかをビッグ ネーム フォーラムで表示する方法を知りたいと思っています。 ?

4

5 に答える 5

6

最も簡単な方法は、誰かが最後にログインした時間を追跡することです。彼らが再び訪れたとき、それ以降に更新されたものはすべて明らかに「新しい」ものです。

ただし、ログアウトすると事実上すべての項目が既読としてマークされるため、これにはいくつかの問題があります。

私が考えることができる他の唯一の方法は、すべてのスレッドと、各ユーザーが見たそのスレッドの最新の投稿を含むテーブルを維持することです。

user_id   thread_id   post_id
      1           5        15
      1           6        19

その情報を使用して、スレッド #5 に 15 より大きい ID を持つ投稿がある場合、そこに未読の投稿があることがわかります。このテーブルは、そのページの最新の投稿の post_id でのみ更新してください。つまり、新しい投稿が 3 ページあり、ユーザーが最初の投稿のみを表示した場合でも、未読の投稿があることがわかります。

于 2010-01-04T03:43:46.740 に答える
0

USER_ID や THREAD_ID などの列を持ち、USER テーブルと THREAD テーブルに対する適切な制約と、USER ID と THREAD ID を含む主キーを使用して、データベースに特別なテーブルを作成できます。

誰かがスレッドを開いたときに、その USER-THREAD-PAIR をその特別なテーブルに挿入するだけです。

スレッドのリストでは、そのテーブルを、そこで使用するのに適したものに単純に外部結合できるようになりました。新しいテーブルの特定の場所に NULL が含まれている場合、そのスレッドは未読です。これにより、次のようなリストが有効になります。

  • 「未読」マーカーが付いたすべてのスレッド
  • すべての未読スレッド
  • ユーザー XY によって読み取られたスレッド

このテーブルに日付列を追加すると、さらに興味深いことができます。

キーとインデックスに注意して、パフォーマンスへの悪影響が大きくなりすぎないようにしてください。既存のクエリに結合することによってのみ、USER-THREAD テーブルから読み取るようにしてください。これは、個々のクエリを常に実行するよりもはるかに高速に機能します。

于 2010-01-04T14:54:29.423 に答える
0

ユーザーが実際にアクセスしたスレッドが追跡されることを除いて、nickfが上で言ったように。そのため、ユーザーが訪れたことのないものはすべて、その訪問者にとって新しいものと見なされます。より細かく制御するために、ユーザーが登録する前に作成されたスレッドは無視され、一定期間アクセスされなかったスレッドは無視される可能性があります。これにより、アクセスされていないすべてのスレッドが新しいスレッドになるのを防ぐことができます。

もちろん、猫の皮を剥ぐ方法はたくさんあります。フォーラムの作成者が何を望んでいるかに応じて、上記の方法を変更することができます。

DC

于 2010-01-04T03:54:52.410 に答える
0

彼らがそのトピックを最後に選択した時間を記録し、投稿のタイムスタンプがスレッドの最後の「クリック」よりも遅いかどうかを確認できます。

于 2010-01-04T03:55:26.200 に答える
0

ユーザーがまだ読んでいない場合は、スレッドが読み取られるたびに挿入を取得するテーブルを作成できます。次に、誰かがスレッドに追加したときに、そのスレッドのテーブル内のすべてのエントリを削除して、すべてのユーザーに対して未読にすることができます。

テーブル構造は次のようになります

forum_id thread_id user_id

主キーのオプションのエクストラhas_read_idを使用して、他のフィールドで複合キーを作成します。

于 2010-01-04T15:03:21.980 に答える