随机选取'行从表在mysql


Selection of a random AND 'published' row from table in mysql

我已经阅读了很多关于这个问题的答案,但似乎没有人在这种情况下回答,当你需要在文章的数据库中随机选择一行,比如wordpress数据库,在wp_posts中,你实际上有修订,垃圾和发布的文章。

如果id是随机的,并且帖子没有像以下代码那样发布,则先前的答案似乎返回空白结果

SELECT * FROM wp_posts AS w
    JOIN (SELECT (RAND() *  (SELECT MAX(id)  FROM wp_posts)) AS id)  AS r2
    WHERE w.id >= r2.id
    AND w.post_status = 'publish'
    ORDER BY w.id ASC
    LIMIT 1

就用

SELECT * 
FROM wp_posts
WHERE post_status = 'publish'
ORDER BY RAND()
LIMIT 1

您的方法旨在比对所有已发布的文章进行排序更有效。以下与仅发表的文章类似:

SELECT *
FROM wp_postsw CROSS JOIN
     (SELECT (RAND() * (SELECT MAX(id) FROM wp_posts WHERE post_status = 'publish')) AS id
     ) r2
WHERE w.id >= r2.id AND w.post_status = 'publish'
ORDER BY w.id ASC
LIMIT 1;

为了提高性能,您需要在wp_posts(post_status, id)上建立索引。

也就是说,您需要子查询内的条件。并且,您需要在WHERE子句中包含适当的列。