我在一个在线Web服务器上有一个数据库表questions
,其中有2000多行数据,我需要随机选出6行。这6行必须是不同的,以便于同一问题不会出现两次在这个问题列表数组中。
我该如何实现这个需求?
你有相对较少的数据,因此最简单的方法是:
select q.*
from questions q
order by rand()
limit 6;
在这个查询中,order by
操作所需时间最长。对2000行进行排序可能会引起注意。一个简单的解决方法是减少被排序的行数。一种方法是:
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行。
在MySQL中使用DISTINCT运算符:
SELECT DISTINCT column FROM table ORDER BY RAND() LIMIT 6;
因此,DISTINCT
将处理并删除重复项。
your query with RAND() LIMIT 10;
进行查询。 - Karthi