Php 从MySQL数据库中选择随机条目

Php 从MySQL数据库中选择随机条目,php,mysql,Php,Mysql,如何使用PHP从MySQL数据库中选择单个随机条目 我想选择作者、AuthorText和日期?您可以随机排序并限制为1行,如下所示: select author, authortext, date from bookstable order by rand() limit 1 将对表中的所有行进行排序,这可能非常慢 更好的解决方案:假设您的表具有常用的主键自动递增字段,生成一个介于min(id)和max(id)之间的rendom编号,并选择最近的id 它不会像“真正的”随机选择那样随

如何使用PHP从MySQL数据库中选择单个随机条目


我想选择作者、AuthorText和日期?

您可以随机排序并限制为1行,如下所示:

select 
  author, authortext, date 
from bookstable 
order by rand()
limit 1
将对表中的所有行进行排序,这可能非常慢

更好的解决方案:假设您的表具有常用的主键自动递增字段,生成一个介于min(id)和max(id)之间的rendom编号,并选择最近的id

它不会像“真正的”随机选择那样随机,因为在删除了大量id之后的id被选择的概率更高。但如果您的桌子很大,则需要50µs而不是2秒

SET @t = (SELECT FLOOR(a + (b-a)*rand()) FROM (SELECT min(id) as a, max(id) as b FROM table)
SELECT * FROM table WHERE id>@t ORDER BY id LIMIT 1;

请看这篇有趣的文章:

有很多人建议使用
order by rand()
,这很好,但请记住,这是一个性能杀手。仔细检查您的代码,可能是您的MySQL函数或查询中的一个变量输入错误。或者不带字段日期也可以尝试。由于MySQL中预定义的函数名,这可能会带来一些问题。顺便说一句,如果您需要更好的性能,请查看本文
ORDER BY rand() LIMIT 1
SET @t = (SELECT FLOOR(a + (b-a)*rand()) FROM (SELECT min(id) as a, max(id) as b FROM table)
SELECT * FROM table WHERE id>@t ORDER BY id LIMIT 1;