3

書籍モデルのカテゴリを考えてみましょうHABTM。たとえば、書籍Aにはカテゴリがあり、&"CA"のみを"CB".
使用してクエリを実行した場合、書籍Aを取得するにはどうすればよいですか。私は知っていますが、それは操作を使用します。操作のようなものが必要です。"CA""CB".where("category_id in (1,2)")ORAND

編集済み

また、カテゴリからのCAみ本を入手することもできます。そして、次のようなクエリ基準を含める方法.where("book.p_year = 2012")

4

1 に答える 1

3
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;
于 2012-11-17T18:02:16.567 に答える