2012-11-05 225 views
7

对于Employee has_many Clients的情况,我正在尝试编写一个ActiveRecord查询,该查询将返回所有具有n个或更多客户端的员工。编写一个连接查询来查找所有至少有一个客户端的雇员,但将查询扩展到这个更一般的案例已经让我难倒了。如何选择超过n个子记录的所有记录

编辑 - 我应该补充一点,我试图完全在数据库级别完成此操作。我想避免在Ruby中迭代集合。

+0

MySQL或Postgres的? – sohaibbbhatti

+0

.... postgres .... – brad

+0

我也有Squeel宝石可用于我,如果有帮助 – brad

回答

17

感谢亩,vijikumar,这是我想出来的

Employee.select("employees.*").joins(:clients).group("employees.id").having("count(clients.id) > ?", n) 
2
@employees=Employee.select{|e|e.clients.length > n } 

活动记录查询相同..

@employees=Employee.find(:all, :joins=>"as emp inner join clients as c on c.employee_id=emp.id", :select=>"emp.id", :group=>'emp.id having count(c) > n') 

它会给员工ID的谁都是有N多的客户。

+0

谢谢,但这不是一个ActiveRecord查询。另外,> not> =。 – brad

+0

但它会给出预期的结果。 – vijikumar

+0

我也给了积极的记录查询也.. – vijikumar

-2

试试这个,

@emp_client = [] 
@emp = Employee.all 
@emp.each do |e| 
    if @emp.clients.present? 
    @emp_clinet << @emp 
    end 
end