首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查看用户查看了哪些帖子

查看用户查看了哪些帖子
EN

Stack Overflow用户
提问于 2013-08-30 14:07:43
回答 3查看 298关注 0票数 1

我有一个表用户,它有:

代码语言:javascript
复制
id INT PRIMARY AUTO_INCREMENT
name VARCHAR(30) NOT NULL

我还有桌椅

代码语言:javascript
复制
id INT PRIMARY AUTO_INCREMENT
post TEXT NOT NULL

如果用户访问某个帖子,我想将其存储在数据库中,他已经查看了该帖子。我将如何修改数据库以适应这种情况,以及如何查询用户尚未看到的帖子。我应该创建一个新的表来存储这些信息吗?还是还有别的诡计?

我的想法是,我只是想要一种方式,如果用户查看的帖子,一旦他不能再查看它。

对不起,我只是想学习数据库,这是我发现的一个非常有趣和困难的挑战。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-30 14:12:20

您需要实现一个多对多关系:用户访问多个帖子,而一个Post由多个用户访问。

这将采取只有两个列的表的形式,每个列都是一个现有表的外键:

代码语言:javascript
复制
CREATE TABLE user_post_visit (
    user_id INT NOT NULL,
    post_id INT NOT NULL,
    PRIMARY KEY (user_id, post_id),
    FOREIGN KEY (user_id) REFERENCES user(id),
    FOREIGN KEY (post_id) REFERENCES post(id)
);

每次用户查看帖子时,都向此表添加一条记录。为了查找给定用户尚未查看而未查看的帖子:

代码语言:javascript
复制
SELECT post.*
FROM post
LEFT JOIN user_post_visit AS upv
    ON (upv.post_id = post.id AND upv.user_id = <your user ID here>)
WHERE upv.post_id IS NULL;
票数 4
EN

Stack Overflow用户

发布于 2013-08-30 14:15:15

“看来我跟在后面,”兰登西德说。:D

在我看来,你想要多到多的关系,所以你需要一张新桌子。你如何做到这一点并不严格,例如

表"read_post“或"unread_post":

user_id,post_id

如果表为unread_post (但创建新帖子时必须为每个用户创建新行),则可以显示未读帖子:

从post内部联接unread_post ON post.id = unread_post.post_id中选择文本,其中user_id =?

如果表是read_post,请未读,请参阅RandomSeeds答案。

票数 0
EN

Stack Overflow用户

发布于 2013-08-30 14:16:51

使用RandomSeed建议的方法在用户和post之间创建桥接器表,然后使用以下方法查询用户查看的帖子:

代码语言:javascript
复制
SELECT post_id, post FROM user_post_visit, post WHERE user_post_visit.user_id=<user id>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18534956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档