Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Rails wählt zufällige Aufzeichnung aus

Die meisten Beispiele, die ich gesehen habe, die dies tun, enden damit, die Zeilen in der Tabelle zu zählen und dann eine Zufallszahl zu generieren, um eine auszuwählen. Dies liegt daran, dass Alternativen wie RAND() sind ineffizient, da sie tatsächlich jede Zeile abrufen und ihnen eine Zufallszahl zuweisen, habe ich jedenfalls gelesen (und sind, glaube ich, datenbankspezifisch).

Sie können eine Methode wie die, die ich gefunden habe, hier hinzufügen .

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

Dadurch hat jedes von Ihnen verwendete Modell eine Methode namens random Das funktioniert so, wie ich es oben beschrieben habe:generiert eine Zufallszahl innerhalb der Anzahl der Zeilen in der Tabelle und ruft dann die Zeile ab, die dieser Zufallszahl zugeordnet ist. Im Grunde machst du also nur einen Abruf, was du wahrscheinlich bevorzugst :)

Sie können sich auch dieses Rails-Plugin ansehen .