搜索数据库中的未读帖子

时间:2011-12-20 22:02:06

标签: php mysql cookies

每次用户阅读帖子时,都会分配一个cookie,例如

set_cookies($id,'read',60*60*24);

但问题是如何选择用户尚未阅读的所有帖子?

SELECT * from posts where (post is unread)

它不需要登录。表结构:

ID | Content | Category

3 个答案:

答案 0 :(得分:2)

使用您的解决方案,您可以执行以下操作:

$ids = array();
if (isset($_COOKIES)) {
    foreach ($_COOKIES as $cookie => $value) {
        if (is_numeric($cookie) && $value == 'read') {
            $ids[] = $cookie;
        }
    }
}

if (isset($ids[0])) {
    $posts = implode(',',$ids);
    $query = "SELECT * from posts where id in ({$posts})";
    // Do the query
} else {
    // no read posts.
}

但是你应该考虑以不同的方式存储读取变量。

答案 1 :(得分:1)

我在这里假设当用户阅读帖子时,帖子读取的ID存储在某个地方。我们暂时假设表格read_posts中的格式为:

UID | ID 

在这种情况下,您的查询将变为:

SELECT * FROM posts WHERE ID NOT IN (SELECT id FROM read_posts WHERE uid = <user's id>);

如果您只允许顺序读取并将数据存储在同一个表中,则查询变得更加简单:

SELECT p.* FROM posts p, read_posts rp WHERE p.ID > rp.ID AND rp.UID = <user id>;

此查询的语法可能略有不同,但我认为一般的想法很清楚。

答案 2 :(得分:0)

如果您可以创建已读取的ID列表,则:是:

SELECT * 
FROM posts 
WHERE ID NOT IN ($list_of_post_ids_that_have_been_read)
相关问题