我想基于从查询返回的对象数量的来源,顺序和限制来迭代地查询大型数据库。基于订单的字段由客户端传递,同时包含先前结果中最后一个对象的ID。
例如,假设一个帖子表。帖子有"观点" (观看次数),"喜欢" (喜欢的数量),"触及" (最后触及)字段。客户端需要通过传递顺序,限制和原始ID(例如,前一次获取中的最后一个对象的ID)一次获取20个帖子。
我知道如何通过将所有帖子加载到内存中,进行适当排序,然后查找客户端传入的帖子的原始ID,然后根据限制返回一些帖子来完成此操作。
我想在数据库中全部执行此操作,以便客户端传递排序顺序,它接收的最后一个对象的ID,然后让查询返回下一n个对象,其中n是限制。
我在Postgres的Rails 4上。
谢谢!
答案 0 :(得分:2)
对于activerecord(和SQL)来说,我显然是新手,因为答案是多么简单:在我的情况下,使用offset和limit就可以了:
Post.select(“id”)。limit('20')。offset('0')。order('views DESC')
此返回20来自视图排序的偏移零。然后,客户端将按适当的计数递增偏移量并执行下一个查询:
Post.select(“id”)。limit('20')。offset('20')。order('views DESC')