我遇到以下問題。我需要對名爲專業人士的表進行大量查詢,但我需要優化查詢,因爲對於每位專業人員,我都會調用關聯的表。包含在Rails中的查詢
但我有兩個相關表的問題:評論和關稅。
評論:
我要打電話去各專業的3條評論。我試着用:
@professionals.includes(:comments).where(:comments => { type: 0 }).last(3)
查詢只帶來了3名專業人士,這個問題不是我所需要的,都只有三個意見,其中類型等於零的專業人士。
,當我嘗試:
@professionals.includes(:comments).where(:comments => { type: 0 })
結果是隻(所有的)意見的專業人士,當我需要的所有專業的有或無意見。但是,如果專業有意見,我只需要在最後的三點意見,其中類型是等於零
關稅:
關稅問題我有一個類似的問題,在這種情況下,我需要的最後4運價爲每專業的。我嘗試:
@professionals.includes(:tariffs).last(4)
但只帶來了最後4名專業人士。
型號:
class Comment < ActiveRecord::Base
belongs_to :client
belongs_to :professional
end
class Professionals < ActiveRecord::Base
has_many :comment
end
我真的不明白你的第二個選擇的問題。你爲所有專業人士提供所有相關評論,這很好。如果您想要爲專業人士提供最後3個職位,則可以在查詢中循環訪問專業人員時調用professional.comments.limit(3)或professional.last(3)。第一個會返回一個ActiveRecord :: Relation,第一個會返回一個Array。你能否顯示你想使用每位專業人士的最後3條評論? –
您需要在WHERE子句中運行子查詢來計算註釋的數量。然而,如何做到這一點(更重要的是如何在不殺死性能的情況下做到這一點)取決於您使用的RBDMS。 '.last(3)'不起作用,因爲它將「LIMIT」應用於整個查詢。 – max