快速摘要。
产品具有并属于许多功能 功能具有并属于许多产品
我想找到所有能够全部所选功能的产品。
示例:
当我致电Offering.with_features([1,2,3])
时,我希望找到仅的Offering_4,因为它是唯一具有三个功能的人。
这似乎是一个愚蠢的问题,但我找不到能够返回结果的好连接。我测试过的所有联接都会重新提供给定功能 ANY 的产品,而不是 ALL 。
想法?
更新
按照 doublea 的建议,我创建了具有自己的ID而不是连接表的表。 它的解决方案仍然有效,我的实现方式如下:
# offering.rb
def self.with_features(features)
if features && features.any?
where(id: FeatureOfferingRelation.with_all_features(features).pluck(:offering_id))
else
scoped
end
end
# feature_offering_relation.rb
def self.with_all_features(features)
select(:offering_id)
.where(feature_id: features)
.group(:offering_id)
.having("count(distinct feature_id) = ?", features.size)
end
有效!!但是我会接受使用连接而不是子查询的其他想法。
答案 0 :(得分:1)
认为查询将是这样的。让我知道它是否有效,否则将在以后测试它/修复它。
"select offering_id from features_offerings where feature_id in (?)
group by offering_id having count(distinct feature_id) = ?",
feature_ids, feature_count
一些事情:
http://class2go.stanford.edu/db/Winter2013
得跑。如果您需要更多,请再次联系。
干杯,