![](/img/trans.png)
[英]Complex SQL query (COUNT, DISTINCT, case when, LEFT OUTER JOIN)
[英]Complex left outer join query
我有一個帶有復雜查詢的Rails應用程序,但似乎無法解決。 我有2張桌子,俱樂部和選擇。 桌上俱樂部就是這樣:
id,name
1,A
2,B
3,C
4,D
桌子選項包含所有用戶從桌子俱樂部中選擇的俱樂部:
id,club_id,user_id
1,1,1
2,1,2
3,2,3
4,3,1
5,3,3
現在,我想要一個選擇框,其中包含來自桌球俱樂部的所有項目,而沒有當前用戶已經選擇的元素(他不能兩次選擇同一個俱樂部)。 因此,對於用戶1,它應該只顯示俱樂部B和D,因為他已經選擇了俱樂部A和C。
因此,我在模型中將其創建為作用域:
scope :selectable, ->(current_user) {
joins('LEFT OUTER JOIN selections ON selections.club_id = clubs.id').
where('selections.id IS NULL OR selections.user_id != ?', current_user.id).
group('clubs.id')
}
當只有一個用戶進行選擇時,這很好用,但是如果更多的用戶選擇了與當前用戶相同的俱樂部,這些俱樂部仍然會顯示。 我可以提高顯示正確的俱樂部的水平嗎?
我找到了一種似乎可行的解決方案,但我不知道這是否是最優雅的解決方案:
scope :selectable, ->(current_user) {
joins('LEFT OUTER JOIN selections ON selections.club_id = clubs.id').
where('selections.id IS NULL OR selections.user_id != ?', current_user.id).
where('clubs.id NOT IN (?)', current_user.clubs).
group('clubs.id')
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.