【问题标题】:SQL Query - put multiple condition on one productSQL 查询 - 对一个产品设置多个条件
【发布时间】:2011-10-19 10:41:15
【问题描述】:

请帮我解决这个问题: 我有一张像这样的桌子:

id_feature  id_product  id_feature_value
1              1           50
2              1           54
5              1           67

我想像这样从这个表中选择:

table 中选择 count(id_product),其中 (id_feature = 1 AND id_feature_value = 50) AND (id_feature = 2 AND id_feature_value = 54) AND (id_feature = 5 AND id_feature_value = 67)

我的查询必须满足条件。就像 count(condition) = 3

我不知道怎么写!

请帮帮我!对不起我的英语!

    SELECT count( pf.id_product ) AS nr_product, value, fv.id_feature_value, filter
FROM `nk_category_features` cat_f
INNER JOIN `nk_feature_value` fv ON fv.id_feature = '11'
AND fv.value IS NOT NULL
INNER JOIN `nk_product_features` pf ON pf.id_feature = '11'
AND pf.id_feature_value = fv.id_feature_value
INNER JOIN `nk_product` p ON p.id_product = pf.id_product
AND p.product_active = '1'
INNER JOIN `nk_product_features` pf1 ON ( pf1.id_feature = '14'
AND (
pf1.id_feature_value = '21'
) )
WHERE cat_f.id_feature = '11'
AND filter >0
GROUP BY pf.id_feature, pf.id_product
ORDER BY abs( fv.value ) ASC

这是我现在使用的查询,但我不喜欢解决方案宽度内连接,同一张表上的内连接

【问题讨论】:

  • 请显示您期望的输出示例,以及表结构(或至少相关字段名称),我们可以提供更好的响应。

标签: mysql sql innodb


【解决方案1】:

试试这个:

select id_product,count(*)
from table
where (id_feature = 1 AND id_feature_value = 50) 
   OR (id_feature = 2 AND id_feature_value = 54) 
   OR (id_feature = 5 AND id_feature_value = 67)
group by id_product
having count(*) = 3

仅获取满足 where 子句的产品总数

select count(*)
from 
  ( select id_product
    from table
    where (id_feature = 1 AND id_feature_value = 50) 
       OR (id_feature = 2 AND id_feature_value = 54) 
       OR (id_feature = 5 AND id_feature_value = 67)
    group by id_product
    having count(*) = 3
  ) tmp

【讨论】:

  • 你应该去掉 select_list / group by 中的 id_feature,否则这将无法正常工作。
  • 您的意思是 OR (aa AND bb) ?更新:现在我明白了,它也在 OP 中。
  • 仅限group by id_product
  • 我要满足条件的产品数量
  • 我必须显示:feature_name(5 产品) .... 当我选择了某些功能时出现问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 2016-12-28
相关资源
最近更新 更多