2011-05-22 48 views
5

我有兩個型號:UserPost其中有user_id列(外鍵)和created_at列。如何按最近的帖子排序用戶?

我想按最近的帖子對用戶進行排序。例如,如果:

user_id = 1, created 3 posts at: 17/05/2011, 19/05/2011, 21/05/2011 
user_id = 2, created 1 post at: 22/05/2011 
user_id = 3, created 2 posts at: 18/05/2011, 20/05/2011 

的結果應該是:

user_id = 2 
user_id = 1 
user_id = 3 

你將如何在Rails 3中實現這一目標?

回答

1

應該是這樣的:

Post.select(:user_id).group(:user_id).order("created_at DESC") 
+1

這是錯誤的。例如,如果有3個用戶,並且每個用戶有一個帖子,User.joins(:posts).size'將是10,而不是3. – 2011-05-22 14:07:43

+0

你是對的,對不起,尋找更好的東西;) – apneadiving 2011-05-22 14:13:01

+0

這幾乎是正確的。按照Denis的建議,在我將其改爲'order(「max(created_at)DESC」)後,看起來好像有一個竅門。儘管如此,我仍然不確定沒有'max'就能完成什麼樣的排序...... – 2011-05-22 14:47:48

2

不知道的回報率的一部分,但你正在尋找到一個組由聲明:

select user_id, max(created_at) as created_at 
from posts 
group by user_id 
order by max(created_at) desc 
1

如果您想通過最新帖子排序你可以依靠的事實,具有最大id行是最新:

Post.select(:user_id).group(:user_id).order("MAX(id) DESC") 

這樣您可以使用id列上的現有主鍵索引(並避免在created_at列中添加新索引)。

相關問題