[edit]删除它,因为它不值得。
答案 0 :(得分:1)
确切的字段类型会有所不同,具体取决于您使用的数据库,但这是一般技术:
您需要具有唯一ID的用户表:
CREATE TABLE users (
user_id INTEGER PRIMARY KEY,
email VARCHAR(50) NULL,
password VARCHAR(32) NULL
);
您的新闻项目表:
CREATE TABLE articles (
article_id INTEGER PRIMARY KEY,
title VARCHAR(50) NULL,
pubdate DATETIMESTAMP,
body blob or whatever your database supports
);
最后是一个表格,表明哪些用户已阅读哪些文章:
CREATE TABLE users_articles (
article_id INTEGER,
user_id INTEGER,
read_date DATETIMESTAMP
);
users_articles
表可能应由article_id
编制索引,具体取决于您使用的查询以及数据库选择如何优化这些查询。
现在,要获取user_id 999尚未阅读的最近7天内的所有文章,您的查询将如下所示:
SELECT a.title, a.pubdate, a.body
FROM articles a
WHERE a.pubdate > date_sub(NOW(), INTERVAL "7 days")
AND NOT EXISTS (
SELECT *
FROM users_articles ua
WHERE ua.article_id = a.article_id
AND ua.user_id = 999
)
当然,这种查询的其他表述也是可能的。间隔语法因数据库而异。但这就是它的要点。
每当用户阅读文章时,您可以使用user_id和article_id以及当前时间戳插入/更新users_articles表。作为副作用,这也为您提供了有关用户最近阅读过哪些文章的信息。
答案 1 :(得分:0)
我建议创建一个新表,您可以在其中保存文章和用户之间的关系。该表格如下所示:
newsId | userId | ip |约会......
答案 2 :(得分:0)
你有一张用户表。你有一张新闻表。
你只需要像user_has_read表...
id
time
user_id
news_id
这样,当用户第一次查看某些内容以将其绑定到新闻项时,您可以向该表添加一个条目。然后在此表中查找他们的user_id,看看他们之前是否曾在这里。
现在,您还可以看到“最近浏览过的”部分,其中包含他们为了便于导航而阅读的最近10件内容的链接。
答案 3 :(得分:-1)
您可以使用布尔标志来确定是否读取了某些内容。当用户访问您希望他/她阅读的任何内容时,您可以转到数据库并将该标志设置为true,表明该记录已被特定用户看到。