【问题标题】:MySQL - very complicated random rowMySQL - 非常复杂的随机行
【发布时间】:2012-04-24 17:07:49
【问题描述】:

我有我的桌子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)

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

【问题讨论】:

  • 从帖子 INNER JOIN user_unread_posts ?
  • 我是否理解正确:您将已读帖子存储在名为“未读帖子”的表中?
  • 不,是的:这是一个例子,真正的表名不是这样的。愚蠢的我......

标签: mysql join random


【解决方案1】:
SELECT  *
FROM    posts
WHERE   id NOT IN
        (
        SELECT  pid
        FROM    user_unread_posts uup
        WHERE   uid = $myuserid
        )
ORDER BY
        RAND()
LIMIT 1

【讨论】:

    【解决方案2】:

    您想将 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
    

    【讨论】:

      猜你喜欢
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2013-02-05
      • 2011-06-23
      • 2011-09-18
      • 1970-01-01
      • 2016-07-29
      相关资源
      最近更新 更多