2014-11-23 73 views
2

我有两个型号: 话题 评论获取最新的N记录为每组

话题的has_many评论

我怎样才能获得最后的4条评论每个主题?

我试着用这一点,但速度很慢:

Comment. 
     joins("INNER JOIN (SELECT m1.id,m1.topic_id, COUNT(m2.id) as c FROM multimedias as m1 LEFT JOin multimedias as m2 ON 
     m1.topic_id = m2.topic_id AND m1.id < m2.id 
     WHERE m1.topic_id IS NOT NULL GROUP BY m1.id, m1.topic_id HAVING c < 4 
     ORDER by m1.topic_id, c desc) as m3 ON m3.id = multimedias.id"). 
     where([ "multimedias.topic_id IN (?)", topics_id ]) 
+0

我的答案在这里有帮助吗? – Anthony 2015-09-18 12:21:18

回答

0

#last方法取一个整数作为参数,所以你可以只使用Comment.last(4)

0

ActiveRecord :: FinderMethods#Last

#last有一个可选论证者t允许您指定最后N个记录,如下所示:

Comment. 
     joins("INNER JOIN (SELECT m1.id,m1.topic_id, COUNT(m2.id) as c FROM multimedias as m1 LEFT JOin multimedias as m2 ON 
     m1.topic_id = m2.topic_id AND m1.id < m2.id 
     WHERE m1.topic_id IS NOT NULL GROUP BY m1.id, m1.topic_id HAVING c < 4 
     ORDER by m1.topic_id, c desc) as m3 ON m3.id = multimedias.id"). 
     where([ "multimedias.topic_id IN (?)", topics_id ]). 
     last(4)