2013-06-18 61 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

謝謝!這正是我所期待的,我無法自己弄清楚這一點!你是男人! –