2014-06-10 35 views
0

我有兩個型號:如何從一個LEFT OUTER獲得最新的紀錄加盟的Rails 3

用戶&帖子(其中用戶的has_many職位)

我需要通過訂購的用戶列表誰擁有不太近期的職位(包括名單頂部沒有任何職位的職位)。

到目前爲止,我設法做這樣的事情:

@users = User 
      .joins("LEFT OUTER JOIN posts ON users.id = posts.user_id") 
      .group("users.id") 
      .order("posts.created_at ASC") 
      .page(params[:page]) 

即把那些沒有任何後上方,但其餘的沒有被排序。我怎麼能做到這一點?

回答

0

我沒有找到一種方法來使用plain activerecord來完成此操作。我的解決辦法是:

@users = User.find_by_sql(%q{ 
       SELECT users.* 
       FROM users 
       LEFT OUTER JOIN (
            SELECT user_id, MAX(created_at) as max_created_at 
            FROM posts 
            GROUP BY user_id 
           ) AS posts_sq 
       ON posts_sq.user_id = users.id 
       LEFT OUTER JOIN posts AS posts 
        ON posts.user_id = posts_sq.user_id 
       AND posts.created_at = posts_sq.max_created_at 
       WHERE deleted = false 
       ORDER BY posts.id IS NULL DESC, posts.created_at DESC 
       }).paginate(:page => params[:page]) 
0

試試這個,

SELECT tc.id, tc.name, tc.order, 
th.id as history_id, th.finished_at, th.score 
FROM trainings tc 
LEFT OUTER JOIN (SELECT id, training_id, MAX(finished_at) as finished_at, score 
    FROM training_histories GROUP BY training_id) th ON th.training_id = tc.id 
WHERE tc.id > 4 
AND tc.id < 8 
GROUP BY tc.id 
ORDER BY tc.order_by ASC, tc.id ASC 

更改屬性,按您的要求。