说我有苹果,橘子和甜瓜,每个都有一个列“created_at”。我如何构建一个ActiveRecord / SQL查询来查找最近的10个苹果,橘子和甜瓜?是否有一种优雅的方式来做到这一点?
答案 0 :(得分: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。如果类型共享很多字段,这将工作正常。然后,您可以使用order
和limit
的单个Fruit.find调用来获取您想要的内容。
在Rails 2中:
Fruit.find(:all, :order => "created_at", :limit => 10)
答案 1 :(得分:0)
未经测试,但这应该有效
Apples.joins(:oranges).joins(:melons).order("apples.created_at,oranges.created_at,melons.created_at DESC").limit(10)