MySQL - 非常复杂的随机行

时间:2012-04-24 17:07:50

标签: mysql join random

我的表格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)

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

2 个答案:

答案 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