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