每次用户阅读帖子时,都会分配一个cookie,例如
set_cookies($id,'read',60*60*24);
但问题是如何选择用户尚未阅读的所有帖子?
SELECT * from posts where (post is unread)
它不需要登录。表结构:
ID | Content | Category
答案 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)