sql >> Databasteknik >  >> RDS >> Mysql

Rails väljer slumpmässigt rekord

De flesta av de exempel jag har sett som gör detta slutar med att man räknar raderna i tabellen och genererar sedan ett slumptal för att välja en. Detta beror på att alternativ som RAND() är ineffektiva eftersom de faktiskt får varje rad och tilldelar dem ett slumpmässigt nummer, eller så har jag läst (och är databasspecifika tror jag).

Du kan lägga till en metod som den jag hittade här .

module ActiveRecord
  class Base
    def self.random
      if (c = count) != 0
        find(:first, :offset =>rand(c))
      end
    end
  end
end

Detta kommer att göra det så att alla modeller du använder har en metod som heter random som fungerar på det sätt jag beskrev ovan:genererar ett slumptal inom antalet rader i tabellen och hämtar sedan raden som är associerad med det slumptalet. Så i princip gör du bara en hämtning vilket är vad du förmodligen föredrar :)

Du kan också ta en titt på denna rails-plugin .



  1. MySQL:kolumner med låg kardinalitet/selektivitet =hur indexerar man?

  2. Sortera en MySQL-fråga med ORDER BY eller med PHP-sorteringsfunktioner

  3. Inga resultat efter att ha tagit bort mysql ft_stopword_file

  4. Varför misslyckas inte frågan med en obefintlig kolumn i underfrågan?