导轨 - 找到所有的课程id其中用户=独特

问题描述:

我有如下表:导轨 - 找到所有的课程id其中用户=独特

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) 

这样做的问题是,如果用户在推特不止一次,他们出现两次(微博都出现),我只希望得到该人的最新的鸣叫。

谢谢!

这是一个有点复杂,但我不知道这是可以做到的,你想在一个简单的方法吗查询:

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) 
+0

你好,谢谢你!它几乎完美的工作!唯一的一点是它拉动用户的第一条推文(而不是最后一条)。当我将'.order(“tweets.tweet_id desc”)'更改为'.order(“tweets.tweet_id asc”)时,它只会改变页面上推文的顺序(v.s.拉取用户的最新推文)。任何想法如何解决这个问题?另外,你碰巧知道这个查询是否可以在PG上工作(站点在使用Cedar栈的heroku上)?再次感谢您的帮助,非常感谢! – 2012-04-11 01:19:22

+0

尝试将'> ='更改为' tsherif 2012-04-11 01:25:15

+0

辉煌!谢谢你,谢谢你,在当地工作。请让我知道是否有任何您推荐的特定资源,我期待了解您如何构建查询。再次感谢!! – 2012-04-11 01:29:11

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

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

会给你的tweet的列表,而无需重复的用户。查询结果以获得课程。


你还想用红宝石方法uniq返回一个没有重复的数组。

+0

我已经试过了,但似乎无法使它工作里面有所有其他参数。你会在哪里添加uniq调用(找到唯一的“from_user”)? – 2012-04-11 00:33:42

+0

你只有一张桌子(用户,课程,推文)? – 2012-04-11 00:36:12

+0

在这种情况下,我有Tweet表(包含上面列出的字段 - 包括from_user)和一个Course_id,其中包含course_id以及与课程相关的其他字段。再次感谢你的帮助。 – 2012-04-11 00:40:16