【问题标题】:How to get the Nth row (or record) with Datamapper如何使用 Datamapper 获取第 N 行(或记录)
【发布时间】:2011-05-14 15:45:08
【问题描述】:

我正在寻找一种更加数据映射的方式来执行以下操作(因为下面的代码依赖于 sqlite):

id = repository(:default).adapter.query(
  'SELECT id FROM ads ORDER BY random() LIMIT 1'
)
@ad = Ad.get(id)

我希望做这样的事情:

@ad = Ad.get(:offset=>rand(Ad.all.count))

@ad = Ad.find(:offset=>rand(Ad.all.count), :limit=>1)

基本上我只是在寻找一种通过偏移量或行号获取行的方法。抱歉,如果已经问过这个问题,我不确定要搜索什么词汇,因为我是 Ruby 和 Datamapper 的新手

【问题讨论】:

    标签: datamapper


    【解决方案1】:

    您可以使用请求Ad.first :offset => rand(Ad.count),但它会调用2条SQL语句:

    SELECT COUNT(*) FROM "ads"
    SELECT "id" FROM "ads" ORDER BY "id" LIMIT 1
    

    您也可以使用原始 SQL:

    repository.adapter.select "SELECT * FROM ads ORDER BY RANDOM() LIMIT 1"
    

    【讨论】:

    • Ad.first :offset => n 部分是我在这种情况下所寻找的,非常感谢!虽然在一个真正的应用程序中我只使用原始 sql,所以也谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    相关资源
    最近更新 更多