我有下表:
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)
问题在于,如果用户发送过两次以上的内容,则会出现两次(两条推文都出现),我只想收到该人的最新推文。
谢谢!
答案 0 :(得分: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)
答案 1 :(得分:0)
我还没有测试过,但试试这个:
Tweet.find(:all, :select => 'DISTINCT from_user', :order => 'tweet_id desc')
将为您提供没有重复用户的推文列表。查询结果以获得课程。
你晚上也想使用ruby方法uniq
,它返回一个没有重复的数组。