【问题标题】:How to get records from SQLite in random order using the Sequel ORM?如何使用 Sequel ORM 以随机顺序从 SQLite 获取记录?
【发布时间】:2014-01-28 06:52:54
【问题描述】:

试图转换这个 SQLite 查询

SELECT * FROM `terms` ORDER BY RANDOM() LIMIT 10

使用 Sequel 模型。我得到的最接近的:

Term.order(rand{}).limit(10)
Term.order('random ()').limit(10)

翻译成

<Sequel::SQLite::Dataset: "SELECT * FROM `terms` ORDER BY 0.6160215951854449 LIMIT 10">
<Sequel::SQLite::Dataset: "SELECT * FROM `terms` ORDER BY 'random ()' LIMIT 10">

但两者都不起作用。有没有办法将 SQLite 或其他特定于数据库的函数传递给 Sequel 的 order()

【问题讨论】:

    标签: ruby sqlite sequel


    【解决方案1】:

    使用Sequel.lit 表达式有效:

    Term.order(Sequel.lit('RANDOM()')).limit(10)
    

    【讨论】:

    • 您与Term.order(rand{}).limit(10) 非常接近。但是您需要通过 Term.order { rand{} }.limit(10) 块传递它。在当前版本中,您将使用Term.order { rand.function }.limit(10)。见virtual_rows.rdoc
    • @DwayneCrooks 调用Term.order{ rand.function } 会导致Sequel::DatabaseError: SQLite3::SQLException: no such function: rand,因为rand 不是SQLite 函数,但Term.order{ random.function } 有效。感谢您的提示。
    猜你喜欢
    • 2017-10-04
    • 2010-11-01
    • 2015-03-30
    • 2013-04-26
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多