2011-02-02 23 views
1

我想喜歡如何鏈或子查詢合併範圍或的find_by_sql

SELECT * FROM (SELECT * FROM products ORDER BY price ASC) AS s GROUP BY item; 

其返回的最便宜的產品全部爲每個項目執行查詢。使用這個子查詢是很好的,因爲它可以在O(N logN)時間內運行。

所以我可以用find_by_sql找到它,但是能夠將它與產品的其他範圍鏈接起來會更好。

任何人都知道如何將其作爲作用域或鏈作用域和find_by_sql寫入?

回答

6

你應該能夠做到像

Product.from("(SELECT * FROM products ORDER BY price ASC) AS products").group(:item) 
+0

真棒,謝謝,這主要是工程... 除非事實證明,在ORDER BY和GROUP BY在sqlite3的工作不同於在MySQL。所以在MySQL中你可以獲得最高的價格,但是在我的sqlite3開發環境中,你獲得了組中最底層的元素,所以價格最低。大聲笑 我想這完全是另一個問題。 – genkilabs 2011-02-02 21:05:50