从Rails中的多个表中进行选择

时间:2010-10-12 08:26:51

标签: sql ruby-on-rails

说我有苹果,橘子和甜瓜,每个都有一个列“created_at”。我如何构建一个ActiveRecord / SQL查询来查找最近的10个苹果,橘子和甜瓜?是否有一种优雅的方式来做到这一点?

2 个答案:

答案 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。如果类型共享很多字段,这将工作正常。然后,您可以使用orderlimit的单个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)