1

我有下表:

Tweet(id: integer, from_user: string, tweet_text: string, tweet_id: integer, course_id: integer, tweet_already_exists: boolean, tweet_posted_to_reviews: boolean, created_at: datetime, updated_at: datetime) 

而且,对于一门特定的课程,我想获得最后 50 条用户独特的推文。我已经做到了这一点:

 Tweet.order("tweet_id desc").find_all_by_course_id(@course.id).first(50)

这样做的问题是,如果用户不止一次发推文,他们会出现两次(两条推文都出现),我只想得到那个人的最新推文。

谢谢!

4

2 回答 2

1

这有点复杂,但我不确定是否可以以更简单的方式执行您想要执行的查询:

Tweet.where("tweets.updated_at >= (SELECT MAX(t.updated_at) FROM tweets AS t WHERE t.from_user=tweets.from_user)").order("tweets.tweet_id desc").find_all_by_course_id(@course.id).first(50)
于 2012-04-11T01:11:05.887 回答
0

我没有测试过,但试试这个:

Tweet.find(:all, :select => 'DISTINCT from_user', :order => 'tweet_id desc')

将为您提供没有重复用户的推文列表。查询结果获取课程。


你晚上还想使用 ruby​​ 方法uniq,它返回一个没有重复的数组。

于 2012-04-11T00:31:30.073 回答