php 论坛如何显示未读的主题?

jqjz2hbq  于 2023-10-15  发布在  PHP
关注(0)|答案(5)|浏览(101)

我有我在php/mysql编码的用户讨论论坛,我想知道如何大牌论坛可以让它显示你的主题有新的职位,通常通过改变一个图标图像旁边的线程,而不使用几乎任何资源?

kzmpq1sx

kzmpq1sx1#

最简单的方法是跟踪某人上次登录的时间。当他们回来参观时,从那时起更新的一切显然都是“新的”。
但是这也有一些问题,因为注销会有效地将所有项目标记为已读。
我能想到的唯一其他方法是维护一个包含所有线程和每个用户看到的线程中的最新帖子的表。

user_id   thread_id   post_id
      1           5        15
      1           6        19

有了这些信息,如果线程#5中有一个ID大于15的帖子,那么你就知道那里有未读的帖子。仅使用该页面上 * 最新文章的post_id更新此表。这意味着如果有3页新帖子,用户只查看第一页,它仍然会知道有未读帖子。

izkcnapc

izkcnapc2#

正如nickf上面所说,除了用户实际访问的线程被跟踪。所以用户没有访问过的任何内容都被认为是该访问者的新内容。对于更精细的粒度控制,忽略在用户注册之前创建的任何线程,并且可能忽略在一段时间内未访问的任何线程。这将防止每个未访问的线程成为它们的新线程。
当然有很多方法来皮肤的猫,并根据什么论坛创作者想要的上述可以改变,以适应
DC

pkln4tw6

pkln4tw63#

你可以记录他们最后一次选择这个主题的时间,然后看看一个帖子是否有一个较晚的时间戳,然后他们在这个帖子上的最后一次“点击”。

uqxowvwt

uqxowvwt4#

您可以在数据库中创建一个特殊的表,其中包含USER_ID和THREAD_ID等列,并对USER和THREAD表进行适当的约束,以及包含USER和THREAD ID的主键。
现在,当有人打开一个线程时,您只需将USER-THREAD-PAIR插入到该特殊表中。
在你的线程列表中,你现在可以简单地外连接到你在那里使用的任何东西上。如果新表在任何特定位置上包含NULL,则线程未读。这将启用以下列表:

  • 所有带有“未读”标记的线程
  • 所有未读线程
  • 用户XY读取的线程数

如果向这个表中添加日期列,则可以执行更有趣的操作。
只需关注您的键和索引,以防止对性能产生太大的负面影响。尝试仅通过将USER-THREAD-table连接到现有查询中来读取它。这将比始终执行单个查询快得多。

zrfyljdw

zrfyljdw5#

如果用户阅读了一个线程,那么可以有一个表,每当线程被读取时,它就得到一个插入。然后,当有人添加到线程时,您可以删除该线程表中的所有条目,从而使所有用户都无法读取。
表结构类似于

forum_id thread_id user_id

使用可选的额外has_read_id作为主键,其他字段组成一个复合键。

相关问题