如何为每个用户构建未读项目警报的数据库

n0n*_*g0n 7 php mysql cookies database-design

我只是有一个通用的数据库理论问题.我需要制作类似于显示用户观看过的帖子/项目(例如在论坛中)或未读电子邮件的内容.我所拥有的是有多个用户可以查看的帖子,但它需要由实际查看过的用户分开.因此,如果用户A查看了帖子1,它将不再显示帖子1是要查看的新项目,但是对于用户B,它仍然会显示帖子1是要查看的新项目.

我已经搜索了其他想法,其中一个是获取用户上次登录时间的时间戳,但实际上我需要跟踪他们看到的帖子,而不是自上次登录后发生的帖子.

如果可能的话,我想要一个MySQL数据库解决方案,但如果必须的话,我愿意接受cookie.我可以自己完成这个并且弄清楚,但我很欣赏任何有关如何正确构建表格以使其最有效的建议.此外,带宽和存储不是问题.

Jar*_*ish 6

在查看phpBB相关模式时,我发现了以下内容:

# Table: 'phpbb_topics_track'
CREATE TABLE phpbb_topics_track (
    user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
    topic_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
    forum_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
    mark_time int(11) UNSIGNED DEFAULT '0' NOT NULL,
    PRIMARY KEY (user_id, topic_id),
    KEY topic_id (topic_id),
    KEY forum_id (forum_id)
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
Run Code Online (Sandbox Code Playgroud)

和:

# Table: 'phpbb_forums_track'
CREATE TABLE phpbb_forums_track (
    user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
    forum_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
    mark_time int(11) UNSIGNED DEFAULT '0' NOT NULL,
    PRIMARY KEY (user_id, forum_id)
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
Run Code Online (Sandbox Code Playgroud)

然后我在他们的wiki中看到这里:

此表保留已访问主题的记录,以便将其标记为已读或未读.我们将mark_time时间戳与主题x的时间戳的最后一个帖子结合使用,以了解是否读取了主题x.

为了准确地判断是否读取了主题,还必须检查phpbb_forums_track.

因此,他们基本上有一个查找表来存储与用户查看主题(线程)相关联的数据,然后根据论坛视图表中的时间戳进行检查,以确定用户是否已查看该主题.