2011-09-07 4 views
1
내가 심포니 호출기에서 페이지 당 1 개 행을 설정하고

당 설정하지만 보여주는 것보다 더 많은 데이터를 제공합니다 특정 사용자에 대한 '라이센스'테이블에 여러 항목이있는 경우 'sfGuardUser'행을 선택하십시오! 여기 내 쿼리입니다 :심포니의 교리 매김 내 쿼리가 다른 테이블과 sfGuardUser 테이블에 합류 방치하고 중복을 일으키는 원인이되기 때문에이 1보다 더 많은 데이터를 페이지

$pager = new sfDoctrinePager('sfGuardUser', '1'); 

    $q = Doctrine_Query::create() 
         ->select('u.id, u.username, g.name, l.id, l.status,    l.client_id, l.vendor_id, l.applied_date, p.org_name') 
         ->from('sfGuardUser u') 
         ->leftJoin('u.Profile p') 
         ->leftJoin('u.Groups g') 
         ->leftJoin('u.LicensedClients l') 
         ->where('g.name = \'vendor\'') 
         ->orderBy('l.applied_date'); 

    $q->setHydrationMode(Doctrine_Core::HYDRATE_SCALAR); 

    $pager->setQuery($q); 
    $pager->setPage($request->getParameter('page', 1)); 
    $pager->init(); 

페이지 매김이,하지만 문제는 라이센스 테이블에서 특정 사용자에 대한 여러 행이 한 페이지에 표시된 여러 행이있는 경우입니다. 올바른 방법으로 어떻게 구현할 수 있습니까?

답변

-1

(sfGuard) 사용자를 페이징 할 때 사용자 테이블과 라이센스 테이블 (1 : n 관계)을 결합하면 어떤 결과를 얻고 싶습니까? 당신이 라이센스 유형/날짜/계산하여 사용자를 정렬 할 경우

, 당신은 교리 1.2에서 작동하지 않습니다

DISTINCT u.id, u.username 
+0

DISTINCT를 사용할 수 있습니다. GROUP BY를 사용하는 것이 더 좋습니다. – Flukey

+0

@ domi27 :이 경우 GROUP BY는 수행하지 않습니다. 쿼리에서 반환 된 데이터 집합을 페이지 매기기를 원합니다. 이 경우 3 명의 사용자 (a, b, c)가 있고 사용자 a에는 3 개의 다른 라이센스가 있고 다른 사용자에게는 none이 있다고 합니다. 사용자의 3 행을 생성 합류 'A'의 라이센스 정보와 사용자 'B'및 라이센스 관련 항목에 널 (null) 값이 "C"에 대한 2 이상의 행에 대응. 이 결과 집합을 페이지 매기기를 원합니다. 현재 그것이 다음 번에 모든 사용자 'A'와 관련된 데이터를 표시하는 하나의 다른 하나를 통해 페이지 매김되도록 페이지 매김 .. – med

관련 문제