例如这个查询:
SELECT `variants`.*
FROM `variants` INNER JOIN `variant_attributes`
ON variant_attributes.variant_id = variants.id
WHERE (variant_attributes.id IN ('2','5'))
和变体has_many variant_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
}}