2

我有我的桌子postsuser_unread_posts。在posts中,保存了论坛的user_unread_posts所有帖子,并保存了用户阅读的所有帖子。

user_undread_posts看起来像这样:

id   uid   pid

现在我想允许用户打开一个他们没有读过的随机帖子。我试过类似的东西

SELECT * FROM posts
LEFT JOIN user_unread_posts uup
ON uup.pid=posts.id
WHERE uup.uid<>1
ORDER BY RAND()
LIMIT 1

(虽然 1 是占位符 UID)

但它不起作用,就像它应该起作用一样,它也返回帖子,这些帖子被阅读......我该如何解决这个问题?

4

2 回答 2

1
SELECT  *
FROM    posts
WHERE   id NOT IN
        (
        SELECT  pid
        FROM    user_unread_posts uup
        WHERE   uid = $myuserid
        )
ORDER BY
        RAND()
LIMIT 1
于 2012-04-24T17:23:03.643 回答
0

您想将 IS NULL 与 LEFT JOIN 一起使用。使用 <> 将 LEFT JOIN 转换为 INNER JOIN,因为 NULL 永远无法匹配 <> 运算符。

这是一个更正的查询:

SELECT * FROM posts
LEFT JOIN user_unread_posts uup
ON uup.pid=posts.id
WHERE uup.uid IS NULL
ORDER BY RAND()
LIMIT 1
于 2012-08-04T08:23:17.980 回答