2016-11-01 5 views
0

저는 약간의 Shop-system을 보유하고 있으며 이제 특정 속성 및 조건을 가진 제품을 선택하려고합니다. 여기특정 속성으로 제품 검색

내 설정 :

테이블 XYZ는 :

그래서 지금은 속성-ID를 가지고 모든 제품을 선택합니다 attribute_group_id은 attribute_id PRODUCT_ID 1,3,5 및 7은 아니지만 9 및 2는 아닙니다.

간단한 방법으로 어떻게 할 수 있습니까? 첫 번째 아이디어는 제품 ID별로 그룹화하고 attribute_ids를 group_concat하고 "having"을 사용하여 원하는 속성 ID를 포함 및 제외하는 것입니다.

SELECT CONCAT('_',GROUP_CONCAT(attribute_id SEPARATOR '_'),'_') as attrs, 
     product_id 
FROM my_table 
GROUP BY product_id 
HAVING (attrs LIKE '%_1_%' 
     AND attrs LIKE '%_3_%' 
     AND attrs LIKE '%_5_%' 
     AND attrs LIKE '%_7_%') 
AND (attrs NOT LIKE '%_2_%' 
    AND attrs NOT LIKE '%_9_%') 

이 방법이 효과적이지만 더 좋은 해결책이 있습니까?

답변

0

아마도 도움이 될까요?

SELECT product_id FROM table_XYZ WHERE attribute_id IN (1,3,5,7);

또는 당신은 단지 몇 제외하는 것이 더 ID와 어떤이있는 경우 :

SELECT가 IN (2,9)을 NOT은 attribute_id table_XYZ 로부터 을 PRODUCT_ID을;

+0

문제는이 attrs가 모두있는 제품을 원한다면이 쿼리가이 attrs 중 하나를 가진 각 제품을 제공한다는 것입니다. – marco