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