2013-06-18 60 views
0

我目前对我的查询有问题,我无法弄清楚为了使其工作的最后一步。 问题是我在我的网站上有一个筛选器选项,可以让访问者根据特定设置进行筛选。查询字段必须匹配多个值

我的查询到目前为止

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+")) 

我试图做到的是,当我执行查询值字段多个值相匹配。

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

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

这是我的结构

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

我认为这是一个设置中集子查询的例子。下面是具有聚合解决这个一种方法和一种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子句中的条件被检验的行与对应的条件存在。

+0

谢谢!这正是我所期待的,我无法自己弄清楚这一点!你是男人! –