2011-08-08 1 views
1

DBIx :: Class를 사용하여 집합 연산을 수행하는 가장 좋은 방법은 무엇입니까? 하나의 솔루션은 쿼리를 기반으로 결과 소스를 만드는 것이지만 조건은 사용자가 정의하며 최적의 대답은 결과 소스를 즉석에서 생성하는 것입니다.DBIx :: Class의 연산 설정

SELECT pid FROM product WHERE code = 48 
INTERSECT 
(
    (SELECT pid FROM attr WHERE attr_name = 'color' AND value = 'blue' 
    INTERSECT 
    SELECT pid FROM attr WHERE attr_name = 'size' AND value = 'big' 
) 
    UNION 
    (SELECT pid FROM attr WHERE attr_name = 'color' AND value = 'green' 
    INTERSECT 
    SELECT pid FROM attr WHERE attr_name = 'size' AND value = 'small' 
) 
) 
+0

사용자가 정의한 말은 위의 9 개 이상의 자리 표시자를 의미합니까? – cubabit

+0

예, 정확하게. 사용자는 (attr_name, value) 및 교차점과 공용체 쌍을 사용하여 많은 필터를 정의 할 수 있습니다. – nsbm

답변

2

DBIx::Class::Helper::ResultSet::SetOperations 당신이 필요 할 수 없습니다 :

기본적으로 내가 code, attr_namevalue는 사용자에 의해 정의된다 DBIC에 이러한 유형의 쿼리를 번역해야합니까?

+0

사실이 DBIC 도우미를 사용할 수 없습니다. 왜냐하면 여러 개의 그룹으로 구성된 프로젝트에 Im이 있고 동일한 데이터베이스 스키마와 동일한 DBIC 레이어를 사용하기 때문입니다. 이 모듈을 사용하기 위해 Resultset Base Class를 변경해야하며 다른 그룹과의 호환성을 유지해야합니다. – nsbm