【问题标题】:How to get records from multiple condition from a same column through associated table如何通过关联表从同一列的多个条件中获取记录
【发布时间】:2012-11-17 14:11:10
【问题描述】:

假设书籍模型HABTM 类别,例如书籍A 具有类别"CA""CB".
如果我只使用"CA""CB" 查询,我如何检索书籍A。我知道.where("category_id in (1,2)"),但它使用OR 操作。我需要类似AND 的操作。

已编辑

也只能从CA 类别中获取书籍。以及如何包含.where("book.p_year = 2012")等查询条件

【问题讨论】:

  • 也许是.where("category_id = ? AND category_id = ?",1,2)
  • Kien,我想这不会起作用,因为就像使用该条件对每一行执行查询一样。例如:category_id 为 1,但您查询 1 和 2。肯定没有任何匹配项。 ps:我已经测试过了。

标签: ruby-on-rails activerecord model activemodel


【解决方案1】:
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 个标准,刚刚更新了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 2020-04-09
  • 2013-02-24
相关资源
最近更新 更多