我在一个包含 2000 多行的在线 Web 服务器上有一个数据库表 questions
,我需要随机选择 6 行。它们必须不同,这样一个问题就不会在 6 个问题的列表数组中出现两次。
我怎样才能做到这一点?
最佳答案
你的数据量比较小,所以最简单的方法是:
select q.*
from questions q
order by rand()
limit 6;
在此查询中,order by
花费的时间最长。订购 2,000 行可能会很明显。一个简单的解决方法是减少排序的行数。一种方法是:
select q.*
from questions q cross join
(select count(*) as cnt from questions) m
where rand() < 100 / m.cnt
order by rand()
limit 6;
where
随机选择大约 100 行,然后命令它们选择 6 行。您几乎可以保证 where
将始终选择至少 6 行。
关于php - 如何在 PHP 中从 MySQL 数据库中选择随机行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40192016/