我有两个型号获取最便宜的产品在类别中轨有效
class Product < ActiveRecord::Base
belongs_to :category
end
class Product < ActiveRecord::Base
belongs_to :category
end
现在我想列出所有类别与他们最便宜的产品。通过获取所有类别,遍历它们并单独找到最便宜的产品,这很容易完成,但是这会做很多查询并且速度很慢。我可以用SQL做到这一点很容易 - 像
SELECT products.*, categories.*
FROM products
JOIN categories ON (categories.id = products.owner_id)
LEFT JOIN products as cheaper_products ON
cheaper_products.category_id = epochs.category_id AND
cheaper_products.price < products.price
WHERE cheaper_products.owner_id IS NULL
是醇” SQL好的技巧,我们‘LEFT JOIN’所有便宜的产品类别中的每一个产品,比只需要这些谁没有任何。
我想知道如何使用Rails3关系做类似的事情 - 我使用squeel,所以它也可以使用。
观察:我想过在产品上定义关系:cheaper_products,但它似乎也没有帮助。
另一个想法:也可以用子查询返回的所有最便宜的产品IDS在各自类别来解决它,但它并没有让我的解决办法(并且是那么优雅)。
注意:我知道如何用bruteforce(selector_sql)来做到这一点,但我真的很想学习更多的轨道3的方式来做到这一点。
有人请吗? – gorn 2012-07-28 02:37:49
我知道它不完全符合你的要求,但你可以在数据库中创建一个索引。看看http://www.postgresql.org/docs/current/static/indexes-expressional.html – Automatico 2012-07-29 14:01:51