Par exemple cette requête:Question Mysql: Y a-t-il quelque chose comme IN ALL query?
SELECT `variants`.*
FROM `variants` INNER JOIN `variant_attributes`
ON variant_attributes.variant_id = variants.id
WHERE (variant_attributes.id IN ('2','5'))
Et has_many variante variant_attributes
Ce que je veux vraiment faire est de trouver quelle variante a deux attributs variante avec ID = 2 et 5. Est-ce possible avec MySQL? Question bonus, existe-t-il un moyen rapide de faire cela avec Ruby on Rails, peut-être avec SearchLogic?
solution
Merci Quassnoi pour la requête que vous avez fourni, qui a parfaitement fonctionné.
Pour utiliser sur Rails, j'ai utilisé le named_scope ci-dessous, je pense que c'est plus simple à comprendre pour les débutants. Fondamentalement named_scope renverrait {: from => x,: conditions => y} et les lignes ci-dessus ont été utilisées pour configurer la variable 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
}}
Merci, ça fonctionne! Veuillez lire mon message ci-dessous pour named_scope que j'utilise dans Rails. – jaycode