たとえば、次のクエリ:
SELECT `variants`.*
FROM `variants` INNER JOIN `variant_attributes`
ON variant_attributes.variant_id = variants.id
WHERE (variant_attributes.id IN ('2','5'))
そしてバリアントhas_manyvariant_attributes
私が実際にやりたいのは、ID =2と5の両方のバリアント属性を持つバリアントを見つけることです。これはMySQLで可能ですか?ボーナス質問、Ruby on Rails、おそらくSearchLogicでこれを行う簡単な方法はありますか?
解決
あなたが提供したクエリをQuassnoiに感謝します。それは完璧に機能しました。
Railsで使用するために、以下のnamed_scopeを使用しました。これは、初心者にとって理解しやすいと思います。
基本的にnamed_scopeは{:from => x、:conditions => y}を返し、上記の行を使用してy変数を設定しました。
named_scope :with_variant_attribute_values, lambda { |values|
conditions = ["(
SELECT COUNT(*)
FROM `variant_attributes`
WHERE variant_attributes.variant_id = variants.id
AND variant_attributes.value IN (#{values.collect { |value| "?" }.join ", "})
) = ?
"]
conditions = conditions + values + [values.length]
{
:from => 'variants',
:conditions => conditions
}}