2012-11-17 40 views
3

讓我們說一本書模型HABTM類別爲例書籍A,如果我查詢只使用"CA" & "CB"具有類別"CA" & "CB".
我怎樣才能檢索到的書一。我知道.where("category_id in (1,2)"),但它使用OR操作。我需要類似AND的操作。如何通過關聯表得到多個條件的記錄從同一列

編輯

而且還能夠得到僅從CA類書籍。以及如何包含查詢條件,如.where("book.p_year = 2012")

+0

也許'.where(「category_id =?AND category_id =?」,1,2)' – Thanh

+0

Kien,我想這不會工作,因爲它就像查詢是按照這個標準對每一行執行的。例如:category_id是1,但你可以查詢1和2.當然,沒有任何匹配。 ps:我已經測試過了。 –

回答

2
ca = Category.find_by_name('CA') 
cb = Category.find_by_name('CB') 
Book.where(:id => (ca.book_ids & cb.book_ids)) # & returns elements common to both arrays. 

否則你需要直接在SQL濫用連接表,分組結果通過book_id,算來,只有當計數至少等於返回行到類別的數量...類似的東西(但我敢肯定它是錯誤的,所以仔細檢查語法,如果你走這條路線,也不確定它會比以上任何更快):

SELECT book_id, count(*) as c from books_categories where category_id IN (1,2) group by book_id having count(*) >= 2; 
+0

這是正確的,但我忘了把另外2個標準,只是更新我的問題。 –

相關問題