2012-02-23 2 views
0

아이디어가 있으십니까? 누구든지이 문제를 해결하기 전에? 사전에다중 조인과 서브 쿼리를 사용하여이 SQL 쿼리를 Perl DBIx :: Class로 변환하려면 어떻게해야합니까?

select c.parent_id, c.category_id, c.name, count(*) 
    from categories c 
    join product_categories pc 
    on c.category_id  = pc.category_id 
    join authorizations a 
    on pc.product_id  = a.product_id 
    join set_authorizations sa 
    on a.authorization_id = sa.authorization_id 
where a.active   = 1 
    and sa.set_id   = 2 
    and c.parent_id in (
    select category_id 
     from categories 
    where parent_id is null 
     ) 
group by c.parent_id, c.category_id, c.name;

감사합니다 ...

+1

테이블과 외래 키에 대한 DBIx :: Class 정의가 이미 있습니까? – dgw

답변

2

당신은 아주 쉽게 달성되지 무언가를 찾고 있습니다. dgw가 올바르게 명시했듯이, DBIx :: Class 또는 Rose :: DB :: Object를 사용하여 모델 객체를 정의하거나 우선적 인 ORM을 정의해야합니다. 이 객체들로 작업하는 것만이 얼마나 복잡한 지간에 사소한 작업이 될 것입니다.

하지만 다른 방법이 있습니다 : SQL :: Abstract 모듈과 그 'extension'을 사용하여, SQL :: Abstract :: More. 쿼리를 추상화 할 필요가 있다면 'sqlish'대신 'perlish'를 사용하십시오. 예를 들어)

, SQL에서 쿼리 :: 초록 : 더 그런 소리 : 아마도 것 모든 조인 된 테이블과 뷰를 작성 ...하지만, 여전히 매우 강력한입니다

my ($sql, @bind) = $sqla->select(
    -columns => [ qw/c.parent_id c.category_id c.name COUNT(*)/ ], 
    -from => [-join => qw/ 
     categories|c 
      category_id=category_id product_categories|pc 
      product_id=product_id  authorizations|a 
      authorization_id=authorization_id set_authorizations|sa 
     /], 
    -where => { 
    'a.active' => 1, 
    'sa.set_id' => 2, 
    'c.parent_id' => \["IN (SELECT category_id FROM categories WHERE parent_id IS NULL)"], 
    }, 
    -group_by => [qw/ c.parent_id c.category_id c.name /], 
); 

코드 (그리고, 나는, 그 성능)가 더 소화가 가능합니까?)

관련 문제