2012-02-11 55 views
0

我正在創建一個rails 3應用程序。最近發佈的SQL查詢排序組

它組(像承包商,客人等等和成員的社會羣體可以張貼在組)。 所以我的模型是Group和Post,並且has_many組的職位(他們每個(職位)顯然都有group_id)。

我想弄清楚,如何獲得由最近的職位分類的羣體,包括沒有任何職位組的列表。

謝謝!

回答

1

取決於你有什麼列,它可能是像

select g.group_id, g.group_name, max(p.post_date) 
from group g left join post p on g.group_id = p.group_id 
group by g.group_id, g.group_name 
order by max(p.post_date) desc 
+0

非常感謝,我一直試圖找出超過一個小時,沒有任何成功。和你的答案,除了缺少DESC;)是完美的。 – v0rin 2012-02-12 10:01:30

+0

謝謝,我已經添加了desc,只是爲了稍後閱讀此內容的任何人的利益。 – 2012-02-12 20:18:16

+0

對於任何想在rails 3中尋找最終分辨率的人,它看起來像這樣: 'sorted_groups_ids = Group.joins(「LEFT JOIN posts p ON groups.id = p.group_id」)。select(「groups.id 「).group(」groups.id「)。order(」MAX(p.id)DESC「)。map(&:id) sorted_groups = Group.find(sorted_groups_ids).sort_by {| g | sorted_groups_ids.index(g.id)}' 第二行是必要的,因爲另一個發現打破了以前的命令 – v0rin 2012-02-13 15:25:18

0
Group.joins('LEFT OUTER JOIN posts ON groups.id = posts.group_id').order('posts.created_at desc').group('groups.id') 
+0

對不起,不起作用 – v0rin 2012-02-12 10:01:56

0

對於任何人誰就會在軌道3尋找最終解決方案,它應該是這樣的:

sorted_groups_ids = Group.joins("LEFT JOIN posts p ON groups.id = p.group_id").select("groups.id").group("groups.id").order("MAX(p.id) DESC").map(&:id) sorted_groups = Group.find(sorted_groups_ids).sort_by { |g| sorted_groups_ids.index(g.id) }

第二行是必要的,因爲另一個發現打破了先前的訂單