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