3

トピック用と返信用の 2 つのテーブルがあります。

+------------------+     +------------------+
| forum_topics     |     | forum_posts      |
+------------------+     +------------------+
| topic_id         |     | post_id          |
| topic_title      |     | post_content     |
| topic_contents   |     | post_date        |
| topic_date       |     | topic_id         |
| topic_keywords   |     |                  |
+------------------+     +------------------+

ユーザーがトピックをオンにしてページを表示し、トピックを読んだときに、その特定のユーザーの既読としてマークされるようにしたいのです。しかし、別のユーザーが来てそのスレッドに返信した場合、前回の訪問以降の新しい投稿としてマークするか、同様のことをしたいと思います。

何か案は?

前もって感謝します。

4

2 に答える 2

2

次のように、ユーザーとフォーラムの投稿に接続されたルックアップ テーブルを使用してこれを行うことができます。

ユーザーがフォーラムを表示すると、次のようにルックアップ テーブルに行を入力します。

userID, topic_id, post_id, currentTime

次に、ユーザーがこのフォーラムを既に読んだかどうかを判断するために、テーブルにクエリを実行して、ユーザー ID が表示されているかどうかを確認できます。これは、ユーザーがフォーラムを読んだことを意味します。

次に、列をフォーラム/スレッドの最後のエントリと比較して、currentTimeどちらが大きいかを確認し、ユーザーが最後の投稿を見たかどうかを確認できます。

編集:はい、トピックと投稿に日時列を追加する必要があります(通常、投稿がいつ行われたかを知ることは良い習慣です)そしていくつかのPHP / SQLについては:

<?php
$userUpdateTime = gmdate(); // assumed to be either dateTime or unixTimestamp of when user last red the topic/forum
$qry = '
SELECT
    IF(`forum_topics`.`updateDateTime` > "'.$userUpdateTime.'", "unRead", "Read")
FROM
    `forum_topics` ';
于 2012-08-22T13:28:16.717 に答える
0

私は自分のフォーラムでメンバーテーブルごとにスレッドごとに次のものを使用しています。

CREATE TABLE `forum_thread_member` (
  `thread_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `member_id` smallint(5) unsigned NOT NULL DEFAULT '0',
  `last_post_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `read_flag` bit(1) NOT NULL,
  `posted_flag` bit(1) NOT NULL,
  `new_flag` bit(1) NOT NULL,
  `mark_flag` bit(1) NOT NULL,
  `bookmark_flag` bit(1) NOT NULL,
  `hidden_flag` bit(1) NOT NULL,
  PRIMARY KEY (`thread_id`,`member_id`),
  KEY `bookmark_flag` (`bookmark_flag`)
) 

スレッドのリストを照会するとき、私はそれに参加したままにしました。値がNULLの場合、スレッドはまだ読み取られていません。これにより、人が読んで参加したスレッドを正確に知ることができます。

last_post_id、その人が最後に読んだ投稿に視覚的にジャンプして表示できるので便利です。は、誰かが投稿するたびにnew_flag設定されるため、スレッドのリストに新しい(未読の)コンテンツがあるかどうかを視覚的に判断するために簡単に使用できます。1他のフラグは、ブックマークの管理、スレッドの非表示などに使用されます。

もちろん、このテーブルは非常に大きくなる可能性がありますが、重要なフラグが設定されていない限り、古いレコードを安全に削除できます(例:)bookmark_flag。人が古いスレッドを検索または参照する場合、(新しいスレッドの場合のように未読であると想定するのではなく)、それらが既読であると想定することができます。

于 2012-08-22T13:37:23.410 に答える