查询字段必须匹配多个值

时间:2013-06-18 20:59:08

标签: mysql

我目前遇到了查询问题,我无法弄清楚最后一步是为了让它发挥作用。 问题是我的网站上有一个过滤选项,让访问者可以过滤特定设置。

到目前为止,我的查询是

SELECT DISTINCT `spt`.`title`
FROM `shop_product_specs` as `sps` JOIN
     `shop_product_texts` as `spt`
     ON `spt`.`product_id` = `sps`.`product_id`
WHERE `cat_spec_id` IN (2, 3) AND (`value` IN ("1200", "1400")) AND (`value` IN ("A", "A+"))

我想要完成的是当我执行查询时,值字段匹配多个值。

因此,例如,我想要一个cat_spec_id为2且值为1200或1400的产品,但也将cat_spec_id与3匹配,其值为“A”或“A +”。

查询的主要问题是它是相同的字段,所以这甚至可能吗?

这是我的结构

CREATE TABLE IF NOT EXISTS `shop_product_specs` (
  `product_spec_id` int(11) NOT NULL AUTO_INCREMENT,
  `product_id` int(11) NOT NULL,
  `cat_spec_id` int(11) NOT NULL,
  `value` varchar(50) NOT NULL,
  PRIMARY KEY (`product_spec_id`),
  KEY `product_id` (`product_id`),
  KEY `cat_spec_id` (`cat_spec_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=312 ;

1 个答案:

答案 0 :(得分:0)

我认为这是set-within-sets子查询的一个例子。这是一个通过聚合和having子句来解决这个问题的方法:

SELECT  `spt`.`title`
FROM `shop_product_specs` as `sps` JOIN
     `shop_product_texts` as `spt`
     ON `spt`.`product_id` = `sps`.`product_id`
group by spt.title
having max(cat_spec_id = 2 and value in ('1200', '1400')) > 0 and
       max(cat_spec_id = 3 and value in ('A', 'A+')) > 0

having子句中的每个条件都验证是否存在具有相应条件的行。