Mysql
 sql >> Base de données >  >> RDS >> Mysql

Les rails sélectionnent un enregistrement aléatoire

La plupart des exemples que j'ai vus finissent par compter les lignes du tableau, puis génèrent un nombre aléatoire pour en choisir un. En effet, des alternatives telles que RAND() sont inefficaces en ce sens qu'ils obtiennent en fait chaque ligne et leur attribuent un nombre aléatoire, du moins ce que j'ai lu (et sont spécifiques à la base de données, je pense).

Vous pouvez ajouter une méthode comme celle que j'ai trouvée ici .

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

Cela fera en sorte que tout modèle que vous utilisez ait une méthode appelée random qui fonctionne de la manière que j'ai décrite ci-dessus :génère un nombre aléatoire dans le nombre de lignes de la table, puis récupère la ligne associée à ce nombre aléatoire. Donc, fondamentalement, vous ne faites qu'une seule récupération, ce que vous préférez probablement :)

Vous pouvez également jeter un œil à ce plugin de rails .