我在具有2000多行的在线Web服务器上有一个数据库表questions
,我需要随机选择6行。它们必须是不同的,因此在6个问题的列表数组中,一个问题不是两次。
我怎样才能做到这一点?
答案 0 :(得分:8)
您的数据量相对较少,因此最简单的方法是:
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行。
答案 1 :(得分:5)
在MySQL中使用DISTINCT运算符:
SELECT DISTINCT column FROM table ORDER BY RAND() LIMIT 6;
因此DISTINCT
会照顾并删除重复项