sql >> Base de Datos >  >> RDS >> Mysql

Rieles seleccionan registro aleatorio

La mayoría de los ejemplos que he visto que hacen esto terminan contando las filas de la tabla y luego generando un número aleatorio para elegir una. Esto se debe a que alternativas como RAND() son ineficientes en el sentido de que obtienen cada fila y les asignan un número aleatorio, o eso he leído (y creo que son específicos de la base de datos).

Puede agregar un método como el que encontré aquí .

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

Esto hará que cualquier modelo que use tenga un método llamado random que funciona de la manera que describí anteriormente:genera un número aleatorio dentro del recuento de filas en la tabla, luego obtiene la fila asociada con ese número aleatorio. Básicamente, solo estás haciendo una búsqueda, que es lo que probablemente prefieras :)

También puede echar un vistazo a este complemento de rieles .