检查用户是否查看了某些内容

时间:2012-11-19 21:35:55

标签: cosmos

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

4 个答案:

答案 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,表明该记录已被特定用户看到。