Mysql
 sql >> Database >  >> RDS >> Mysql

Le rotaie selezionano un record casuale

La maggior parte degli esempi che ho visto in questo modo finiscono per contare le righe nella tabella, quindi generare un numero casuale per sceglierne uno. Questo perché alternative come RAND() sono inefficienti in quanto ottengono effettivamente ogni riga e assegnano loro un numero casuale, o almeno così ho letto (e credo siano specifici del database).

Puoi aggiungere un metodo come quello che ho trovato qui .

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

Questo farà in modo che qualsiasi modello che usi abbia un metodo chiamato random che funziona nel modo descritto sopra:genera un numero casuale all'interno del conteggio delle righe nella tabella, quindi recupera la riga associata a quel numero casuale. Quindi, in pratica, stai facendo solo un recupero che è quello che probabilmente preferisci :)

Puoi anche dare un'occhiata a questo plug-in rails .