2013-06-18 3 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+")) 

입니다.

예를 들어, 나는 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

입니다.

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 절의 조건

각 행은 대응하는 조건에 있는지 확인한다 : 여기 응집 이것을 해결하는 방법 및 having 절이다.

+0

감사합니다. 이것은 정확하게 내가 찾고 있었던 것이고, 이것을 나 자신을 이해할 수있는 방법이 없었습니다! 너는 그 사람이야! –

관련 문제