我的表格posts
和user_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)
但是它不起作用,就像它应该工作一样,它也会返回帖子,这些都被阅读......我该如何解决这个问题?
答案 0 :(得分:1)
SELECT *
FROM posts
WHERE id NOT IN
(
SELECT pid
FROM user_unread_posts uup
WHERE uid = $myuserid
)
ORDER BY
RAND()
LIMIT 1
答案 1 :(得分:0)
您想在LEFT JOIN中使用IS NULL。使用&lt;&gt;将LEFT JOIN转换为INNER JOIN,因为NULL永远不会匹配&lt;&gt;运营商。
以下是更正的查询:
SELECT * FROM posts
LEFT JOIN user_unread_posts uup
ON uup.pid=posts.id
WHERE uup.uid IS NULL
ORDER BY RAND()
LIMIT 1