我有兩個型號獲取最便宜的產品在類別中軌有效
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