带有偏差的MySQL随机记录

时间:2011-08-01 02:32:04

标签: mysql performance select random

我想从一个表中选择一个随机记录,但偏向于特定字段中更高的值 - 我不希望任何记录有0%的机会被选中,只是不太可能被选中

从这篇文章中,我知道随机选择可能很慢,你可以加快速度: http://wanderr.com/jay/order-by-slow/2008/01/30/

但是,当您处理带有连接和where语句的几个表时,并希望使用其中一个字段作为偏向随机性的方法(该字段的值越高,越有可能被选中) ?例如:

SELECT a.id, a.date, a.userid, b.points FROM table_a AS a INNER JOIN table_b AS b ON (a.userid = b.userid) WHERE DATE_SUB(CURDATE(), INTERVAL 60 DAY) <= a.date

我怎样才能将上述内容转变为有效但不是真正随机的查询,而这些查询会偏向更高的b.points值?

1 个答案:

答案 0 :(得分:0)

我的2美分,偏见可以这样执行:

假设得分在0,100之间。

您随机选择5条记录>> 75,3记录&gt; 50,2记录&gt; 25,1记录&gt; 0

现在,如果您再次从这11条记录中随机出现,则会偏向更高的分数。

将它们放在sql中,称为连接表“abc”

Select * from (
select * from abc where b.points > 75 order by rand() limit 5
cross join 
select * from abc where b.points > 50 and b.points <75 order by rand() limit 3
cross join 
select * from abc where b.points > 25 and b.points <50 order by rand() limit 2
cross join 
select * from abc where b.points > 0 and b.points <25 order by rand() limit 1
) as result
order by rand() limit 3

性能方面,我将查看您的链接并更新此anwser。