手写has_many关系的SQL查询

时间:2014-04-03 14:03:39

标签: mysql sql ruby-on-rails activerecord

由于我无法控制的原因,我需要在MySQL手工编写SQL查询。

我的模特是:

class Survey < ActiveRecord::Base
  has_many :buildings
  has_many :floors, through: :buildings
  has_many :workspaces, through: :floors
end

class Workspace < ActiveRecord::Base
  belongs_to :floor
end

class Floor < ActiveRecord::Base
  has_many :workspaces
end

我需要根据它的工作空间来订购我的调查。

在Rails代码中,我可以执行以下操作:@survey.workspaces.size,这将获得@survey所拥有的工作空间量。

鉴于此SQL查询:

SELECT `surveys`.* 
FROM `surveys` 
ORDER BY surveys.workspaces.size asc 
LIMIT 10 
OFFSET 0

如何根据工作空间金额手动编写查询?

2 个答案:

答案 0 :(得分:0)

向模型添加范围。找到导致想要答案的AR。将to_sql添加到该ActiveRecord以获取所需的SQL代码。

答案 1 :(得分:0)

我不确定您想要将SQL与Rails混合在一起,还是仅仅使用SQL。纯SQL将是:

SELECT s.id, count(w.id) AS workspaces_count
FROM surveys s LEFT JOIN workspaces w ON s.id = w.survey_id
GROUP BY s.id
ORDER BY 2

如果要从Survey添加其他列,则还需要将它们添加到GROUP BY。