作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如这个查询:
SELECT `variants`.*
FROM `variants` INNER JOIN `variant_attributes`
ON variant_attributes.variant_id = variants.id
WHERE (variant_attributes.id IN ('2','5'))
变体有_许多变体_属性
我真正想做的是找出哪个变体同时具有 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
}}
最佳答案
假设 variant_attributes (variant_id, id)
是唯一的:
SELECT `variants`.*
FROM `variants`
WHERE (
SELECT COUNT(*)
FROM `variant_attributes`
WHERE variant_attributes.variant_id = variants.id
AND variant_attributes.id IN ('2','5')
) = 2
关于mysql问题: is there something like IN ALL query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2746273/
我是一名优秀的程序员,十分优秀!