嘿,伙计们,我正试着从Ruby on Rails的数据库中随机选择数据。不幸的是,sqlite和mysql对“random”函数使用不同的名称。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的rand()
有效地别名为标准的random()
:
CREATE FUNCTION random() RETURNS FLOAT NO SQL SQL SECURITY INVOKER RETURN rand();