我想从一个表中选择一个随机记录,但偏向于特定字段中更高的值 - 我不希望任何记录有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值?
答案 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。