Poszukuję metody zwracającej losową liczbę rekordów (n) na ogólnej ich liczbie (s) s>n (oczywiście).
- Metoda ma być możliwie wydajna (będzie wywoływana na każdym przeładowaniu)
- ID rekordów nie są następujące po sobie
- Dobrze by było żeby wielkość liczby s nie była zmienną (bardzo) znaczącą dla wydajności metody
- mySql
moje pierwsze podejście było czysto ruby/rails, i oczywiście nie spełnia założeń, było takie:
@disp = Item.sort_a
@show = []
15.times do
@show << @disp.delete(@disp.rand)
end
@show
Optymalizacji trzeba chyba szukać w zapytaniu sql.
Świadomy jestem istnienia rozwiązania opisanego tutaj: http://robzon.aenima.pl/2008/05/selecting-multiple-random-rows-from.html
czy ktoś ma jakieś inne pomysły ?