2012-04-11 69 views
1

我有如下表:導軌 - 找到所有的課程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) 

這樣做的問題是,如果用戶在推特不止一次,他們出現兩次(微博都出現),我只希望得到該人的最新的鳴叫。

謝謝!

回答

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

你好,謝謝你!它幾乎完美的工作!唯一的一點是它拉動用戶的第一條推文(而不是最後一條)。當我將'.order(「tweets.tweet_id desc」)'更改爲'.order(「tweets.tweet_id asc」)時,它只會改變頁面上推文的順序(v.s.拉取用戶的最新推文)。任何想法如何解決這個問題?另外,你碰巧知道這個查詢是否可以在PG上工作(站點在使用Cedar棧的heroku上)?再次感謝您的幫助,非常感謝! – 2012-04-11 01:19:22

+0

嘗試將'> ='更改爲'<=',並將嵌套查詢中的MAX改爲MIN。不知道關於PG的東西,雖然... – tsherif 2012-04-11 01:25:15

+0

輝煌!謝謝你,謝謝你,在當地工作。請讓我知道是否有任何您推薦的特定資源,我期待了解您如何構建查詢。再次感謝!! – 2012-04-11 01:29:11

0

我沒有測試過,但試試這個:

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

相關問題