讓我們說一本書模型HABTM
類別爲例書籍A,如果我查詢只使用"CA"
& "CB"
具有類別"CA"
& "CB".
我怎樣才能檢索到的書一。我知道.where("category_id in (1,2)")
,但它使用OR
操作。我需要類似AND
的操作。如何通過關聯表得到多個條件的記錄從同一列
編輯
而且還能夠得到僅從CA
類書籍。以及如何包含查詢條件,如.where("book.p_year = 2012")
讓我們說一本書模型HABTM
類別爲例書籍A,如果我查詢只使用"CA"
& "CB"
具有類別"CA"
& "CB".
我怎樣才能檢索到的書一。我知道.where("category_id in (1,2)")
,但它使用OR
操作。我需要類似AND
的操作。如何通過關聯表得到多個條件的記錄從同一列
編輯
而且還能夠得到僅從CA
類書籍。以及如何包含查詢條件,如.where("book.p_year = 2012")
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;
這是正確的,但我忘了把另外2個標準,只是更新我的問題。 –
也許'.where(「category_id =?AND category_id =?」,1,2)' – Thanh
Kien,我想這不會工作,因爲它就像查詢是按照這個標準對每一行執行的。例如:category_id是1,但你可以查詢1和2.當然,沒有任何匹配。 ps:我已經測試過了。 –