2013-04-07 170 views

回答

2

如果你擔心這個速度可能會更快:

Model.where(status: 2).offset(rand(Model.where(status: 2).count)).first 
+0

在MySQL中'OFFSET'的速度非常慢,有時'COUNT(*)'可能需要很長時間。 – tadman 2013-04-07 05:43:09

1

真正黑客的方法來做到這一點是:

Model.where(:status => 2).order('RAND()').first 

注意ORDER BY RAND()可以在大表慘遭慢,但對於小的它的罰款。

+0

ETA:虛驚一場。 – alt 2013-04-07 03:19:32

相關問題