2016-01-18 26 views
0

我想根據查詢返回的對象數量的起點,順序和限制來迭代查詢大型數據庫。基於訂單的字段由客戶端傳入,以及上一個結果中最後一個對象的ID。ActiveRecord按順序查詢對象的子集

例如,假設一個Posts表。帖子具有「視圖」(視圖數量),「喜歡」(喜歡的數量)和「被觸摸」(最後被觸摸的)字段。客戶端需要通過傳遞訂單,限制和源ID(例如,上一次獲取中的最後一個對象的ID)一次獲取20個帖子。

我知道如何做到這一點,將所有帖子加載到內存中,進行適當排序,然後找到客戶端傳入的帖子的來源ID,然後根據限制返回多個帖子。

我想在數據庫中這樣做所以客戶端按照排序順序傳遞最後一個對象的ID,然後讓查詢返回n個對象,其中n是限制。

我在使用Postgres的Rails 4上。

謝謝!

+1

你想排序的屬性是什麼? 「收到的最後一個對象」是什麼意思?我們在談論用戶的帖子嗎?你應該編輯你的問題並多解釋一下你的問題。 – Cyzanfar

+0

查看我上面的編輯...客戶端應該能夠定義要排序的屬性。在我的例子中,這將是喜歡,觀看或感動。其基本思想是允許客戶端遍歷由限制定義的批量對象的大量列表。 – edward

+0

你想要一個可排序的表格供用戶進行交互嗎? – Cyzanfar

回答

1

我顯然新的ActiveRecord(和SQL)給出的答案是多麼簡單:在我的情況下,使用偏移和限制的伎倆:

Post.select(「ID」)的限制(」 20')。offset('0')。order('views DESC')

這將返回20個結果,偏移量爲零,按視圖排序。客戶端然後將偏移量增加適當的計數,並執行下一個查詢:

Post.select(「id」)。limit('20')。offset('20')。order('views DESC' )

+0

你可以使用'.limit(20).offset(20)',不需要使用字符串作爲數字。 –