2014-04-03 93 views
0

至於原因,在我的掌握SQL查詢,我需要手寫在MySQL手工SQL查詢。手寫用的has_many關係

我的車型有:

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 

我怎麼能寫,基於工作區的訂單數量用手查詢?

+0

我在這裏使用了一個名爲範圍... – Starkers

+0

我想太多,但我真的需要通過手藝,由於設計上的限制手這個查詢。 – sergserg

回答

0

將範圍添加到模型中。找到導致想要的答案的AR。將to_sql添加到該ActiveRecord以獲取所需的SQL代碼。

0

我不知道你想使用Rails或單機SQL混合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。