Rails中多条件Where查询.count()统计失效问题求助
正确统计多条件交集记录数的最优实现方式
你原来的代码用and连接多个where调用,这在Ruby里属于逻辑判断运算符,会返回最后一个为真的表达式结果,所以实际只统计了最后一个where(:outsourced => false)的记录数,并没有合并所有条件取交集。
下面是两种最优实现方式:
- 方式一:合并条件到单个
where(推荐)
直接把所有条件放在同一个where的哈希参数里,ActiveRecord会自动生成AND连接的SQL查询,而且count直接在数据库层面统计,不用加载记录到内存,性能最优:
<%= @user.cases.where(finished: false, ready: false, ship: false, outsourced: false).count %>
- 方式二:链式调用
where
如果条件需要动态拼接(比如根据不同场景添加条件),可以链式调用多个where,每个where添加一个条件,ActiveRecord同样会用AND合并所有条件:
<%= @user.cases.where(finished: false) .where(ready: false) .where(ship: false) .where(outsourced: false) .count %>
两种方式最终生成的SQL逻辑完全一致,都会在数据库端完成多条件过滤和计数,是最高效的实现方式。
内容的提问来源于stack exchange,提问作者nourza
相关产品推荐
相关产品推荐

