【问题标题】:Selecting random in rails sqlite vs mysql在rails sqlite vs mysql中选择随机
【发布时间】:2010-12-05 16:33:47
【问题描述】:

大家好,我正在尝试从 Ruby on Rails 的数据库中选择随机数据。不幸的是,sqlite 和 mysql 对“随机”函数使用不同的名称。 Mysql 使用 rand(),sqlite 使用 random()。到目前为止,我对在我的开发环境中使用 sqlite 感到非常高兴,我不想为此放弃它。

所以我有一个解决方案,但我对它不是很满意。首先,在 RoR 中是否有更简洁的抽象来获取随机函数?如果不是,这是获得“适配器”的最佳方式吗?

# FIXME: There has to be a better way...
adapter = Rails.configuration.database_configuration[Rails.configuration.environment]["adapter"]
if adapter == "sqlite3"
  # sqllite calls it rand
  random = "random"
else
  # mysql calls it rand
  random = "rand"
end

query.push("SELECT *, (" +  random + "() * (0.1 * value)) AS weighted_random_value...")

【问题讨论】:

    标签: mysql ruby-on-rails random sqlite


    【解决方案1】:

    您可以通过创建函数有效地将 MySQL 的 rand() 别名为标准 random()

    CREATE FUNCTION random() RETURNS FLOAT NO SQL SQL SECURITY INVOKER RETURN rand();
    

    【讨论】:

      【解决方案2】:

      我写了一个小插件来处理这个问题:

      http://github.com/norman/active_record_random

      【讨论】:

      【解决方案3】:

      我在本地使用 SQLite 开发时遇到了这个问题。不幸的是,这不是您将要运行的数据库之间的唯一区别(例如,布尔值的处理方式也不同)。

      是否需要同时支持 SQLite 和 MySQL?如果不是,我建议切换到单个数据库:您在生产中部署的那个。

      这需要更多时间来设置,但恕我直言,从长远来看,它会节省您的时间,并且您会确信您的应用程序在您实际部署它的数据库上运行良好。

      【讨论】:

        猜你喜欢
        • 2011-05-06
        • 2012-08-29
        • 2011-04-16
        • 2010-11-19
        • 2023-04-03
        • 1970-01-01
        • 2018-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多