0

PostgreSQL を使用して PHP で簡単なフォーラムを作成しました。フォーラムは、トピックを含むいくつかのサブフォーラム (または必要に応じてカテゴリ) で構成されています。ユーザーが最後にトピックにアクセスしたのはいつかを保存するテーブルがあります。これは、user_id、topic_id、timestamp のようなものです。

最後のトピックへの返信のタイムスタンプと最後のユーザー アクセスのタイムスタンプを比較することで、どのトピックを未読としてマークする必要があるかを簡単に判断できます。

私の質問は、どのサブフォーラム (カテゴリ) を未読としてマークする必要があるかを効率的に判断するにはどうすればよいですか? 私が思いついたのはこれだけです: ユーザーがトピックにアクセスするたびに、訪問のタイムスタンプを更新し、現在のサブフォーラムのすべてのトピックが既読か未読かを確認します。それらがすべて既読の場合、サブフォーラムをユーザーの既読としてマークします。それ以外の場合は、未読としてマークします。しかし、私は別の方法があるはずだと思います。

前もって感謝します。

4

1 に答える 1

1

同様の動作を実現する方法は(あなたのように)たくさんあります。効率性について言及しているので、パフォーマンスが重要であると考えます。

以前にこれを処理した方法では、未読のコンテンツを処理するデータベースはまったく関与していませんでした。それを念頭に置いて、私の提案は次のようになります。

  1. 最初の訪問では、たとえば 3 日より新しいトピックのみを「未読」としてマークします
  2. ユーザーがトピックを参照すると、スレッドのトピック ID と LastUpdate がクライアントの Cookie にスローされ始めます。
  3. フォーラムのページが読み込まれたら、Cookie をチェックします。スレッドが更新されていないかどうかを確認します。このコードと Cookie の処理は、純粋な javascriptで簡単に実行できます。
  4. クライアントが Web サイトから 1 週間離れていても問題ありません。3 日より新しいものはすべて未読として表示されます (初回訪問ルール)。

追伸: これは、人が読んだことのないものを知ることがいかに重要であるかに 100% 関係しています。私の提案では、これは 100% 信頼できるわけではないため、重要なことではありません (結局のところ、データベース/適切な永続性を使用していません)。

于 2010-02-17T21:49:48.520 に答える