选择随机发布的'从mysql中的表行

时间:2015-09-30 00:05:11

标签: php mysql wordpress

我已经阅读了很多关于这个问题的答案,但是当你需要在文章数据库中选择一个随机行时,似乎没有人回答,比如一个wordpress db,在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

2 个答案:

答案 0 :(得分:2)

只需使用

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

发布随机记录。

答案 1 :(得分:0)

您的方法旨在比排序所有已发布的文章更有效。以下内容仅适用于已发表的文章:

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子句中包含适当的列。