我需要检索集合列表,即@medications、@treatments、@therapies 等,以及每个集合相关记录的计数。
这可行,但会创建初始查询,然后为每个相关记录计数创建一个新查询。有什么方法可以最大限度地减少查询数量?
@medications = Medication.includes(:records).select(:id, :name).where(office_id: current_user.selected_office)
@medications.each do |medication|
medication.record_count = medication.records.count
end
如果@medications 查询有 10 个结果,我总共有 11 个查询。我需要 10 个具有相关记录计数的集合,因此每个请求最终会有 110 个查询。
所有模型都具有相同的名称、office_id 等属性
我想知道如何重组数据库以更好地使用或重组查询。顺便说一句,我正在使用 Postgres db v 9.6
最佳答案
连接和计数怎么样?
Medication.left_outer_joins(:records)
.select('medications.name, medications.id, COUNT(records.id) AS records_count')
.group(:id)
.where(office_id: current_user.selected_office)
如果您计划对每种药物的每条记录进行计数,那么您可以使用joins
和count
传递记录并分配一个别名。
由于每个模型都有 name 和 id 列,您需要更精确地定义它们,并且在这种情况下分组(如果我错了请纠正我)是强制性的,否则您会得到一个 PG::GroupingError
.
关于ruby-on-rails - 减少 Rails 5 中的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49459401/