2010-10-12 90 views
3

說我有蘋果,桔子和瓜,並且每個都有一列「created_at」。我將如何構建一個ActiveRecord/SQL查詢來查找最近的10個蘋果,橘子和甜瓜?有沒有一個優雅的方式來做到這一點?從Rails中的多個表中進行選擇

+0

這些是不同類型的 - 即你有一個蘋果,橘子和甜瓜類,或者你有一個帶有fruit_name屬性的水果類? – Codebeef 2010-10-12 08:52:41

回答

2

如果你在單獨的表中有這些類型,那麼我不認爲你可以在單個SQL查詢中做到這一點。

你可以找到ID和類型的最近的記錄是這樣的:

SELECT * FROM 
(SELECT 'Apple' AS class, id, created_at FROM apples LIMIT 10 
UNION 
SELECT 'Orange' AS class, id, created_at FROM oranges LIMIT 10 
UNION 
SELECT 'Melon' AS class, id, created_at FROM melons LIMIT 10) AS most_recent 
ORDER BY created_at 
LIMIT 10; 

然後使用這些記錄的ID來獲取特定對象。

但是,如果可以,請嘗試使用單表繼承模式(這是built-in into rails)將所有這些存儲在單個表中。如果類型共享很多字段,這將工作正常。然後你可以用orderlimit單個Fruit.find調用來獲取你想要的。

在Rails 2:

Fruit.find(:all, :order => "created_at", :limit => 10) 
0

未經測試,但應該工作

Apples.joins(:oranges).joins(:melons).order("apples.created_at,oranges.created_at,melons.created_at DESC").limit(10)