-4

[编辑] 删除它,因为它不值得。

4

4 回答 4

1

确切的字段类型会根据您使用的数据库而有所不同,但这是一般技术:

您需要一个具有唯一 ID 的 users 表:

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

现在,要获取过去 7 天内 user_id 999 尚未阅读的所有文章,您的查询将如下所示:

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 表。作为副作用,这还为您提供有关用户最近阅读的文章的信息。

于 2012-11-19T21:58:24.133 回答
0

我建议创建一个新表,您可以在其中保存文章和用户之间的关系。该表将如下所示:

新闻ID | 用户名 | 知识产权 | 日期 ...

于 2012-11-19T21:48:16.483 回答
0

你有一个用户表。你有一个新闻表。

你只需要像 user_has_read 表这样的东西......

id
time
user_id
news_id

这样,当用户第一次查看某些内容以将他们与新闻项目联系起来时,您可以向此表添加一个条目。然后在此表中查找他们的 user_id 以查看他们以前是否来过这里。

您现在还可以有一个“最近查看”部分,其中包含指向他们最近阅读的 10 篇内容的链接,以便于导航。

于 2012-11-19T21:48:21.183 回答
-1

您可以有一个布尔标志来确定是否读取了某些内容。当用户获得您希望他/她阅读的任何内容时,您可以转到数据库并将该标志设置为 true,表明该记录已被特定用户看到。

于 2012-11-19T21:40:35.290 回答