我有用户论坛我在php / mysql编码,我想知道大牌论坛如何让它向你展示哪些主题在其中有新帖子,通常是通过更改线程旁边的图标图像而不使用几乎没有任何资源?
答案 0 :(得分:7)
最简单的方式是跟踪某人登录的最后时间。当他们回来访问时,从那时起更新的所有内容显然都是“新的”。
但这有一些问题,因为有效注销会将所有项目标记为已读。
我能想到的另一种方法是维护一个包含所有线程的表以及每个用户看到的该线程中的最新帖子。
user_id thread_id post_id
1 5 15
1 6 19
有了这些信息,如果第5号帖子中有一个ID大于15的帖子,那么你知道那里有未读的帖子。仅使用该页面上最新帖子的post_id 更新此表。这意味着,如果有3页的新帖子,并且用户只查看第一个帖子,那么它仍然会知道有未读帖子。
答案 1 :(得分:0)
正如上面所述,除了跟踪用户实际访问过的线程之外。所以用户没有访问过的任何内容都被认为是该访问者的新内容。对于更细粒度控制,忽略在用户注册之前创建的任何线程,并且可能忽略在一段时间内未访问的任何线程。这会阻止每个未访问的线程成为他们的新线程。
当然有很多方法可以让猫皮肤变形,并且根据论坛创建者想要的内容可以改变以适应
DC
答案 2 :(得分:0)
您可以记录他们上次选择该主题的时间,然后查看帖子是否有更晚的时间戳,然后是他们在帖子上的最后一次“点击”。
答案 3 :(得分:0)
您可以在数据库中创建一个特殊的表,其中包含USER_ID和THREAD_ID等列,并对USER和THREAD表以及包含USER和THREAD ID的主键具有适当的约束。
现在当有人打开一个帖子时,你只需将USER-THREAD-PAIR插入该特殊表格即可。
在您的主题列表中,您现在可以简单地将该表外连接到适合您在那里使用的内容。如果您的新表在任何特定位置包含NULL,则该线程未读。这将启用以下列表:
如果您在此表中添加日期列,则可以执行更有趣的操作。
请密切关注您的密钥和索引,以防止对负面性能造成太大负面影响。尝试仅通过将其加入现有查询来读取USER-THREAD表。这比一直执行单个查询要快得多。
答案 4 :(得分:0)
如果线程被读取,如果读取它的用户尚未读取,则可以有一个表来获取插入。然后当有人添加到该线程时,您可以删除该线程的表中的所有条目,从而使其对所有用户都不读。
表结构类似于
forum_id thread_id user_id
使用主键的可选附加has_read_id
,其他字段构成复合键。