2013-09-24 3 views
1

내가 젠드 \ DB \ SQL을 SQL 집계 함수에 대한 몇 가지 해결책을 발견 WHERE의 키와 같은 기능을하지만, 그들은 나를 위해 작동하지 않습니다 :(ZF2 젠드 DB SQL을 집계

내 옛날 PDO 정책을 (작동 " 간단한 "PDO) : 첫 번째 집계 함수에 대한

SELECT DISTINCT DATE_FORMAT(date, '%e') FROM termine WHERE MONTH(date) = ? 

솔루션 :.

$select->columns(array(new Expression("DISTINCT DATE_FORMAT(date, '%e')"))); 

하지만 난 아무 생각이없고 캔트 아무것도 찾을 둘째 집계 함수에 대한

,
$select->where(array('MONTH(date)' => $month)); 

... 오류가 발생하기 때문에 해결책이 없습니다.

저는 알고 있습니다 : 하나 이상의 테이블 열 (월)이 내 해결책이 될 수 있지만 ... 충분하지 않습니다.

Zend \ Db \ Sql \ Select() ->에서 SQL 집계 함수를 키로 사용하려면 어떻게해야합니까?()?

+1

가능한 복제본 [ZF2의 열 이름 앞에 Sql \ Expression을 추가하는 방법?] (http://stackoverflow.com/questions/14190872/how-to-add-sql-expression-in-front-of -column-name-in-zf2) – akond

답변

1

테스트하지 않았기 때문에 대답이 얼마나 좋은지 모르겠다. 그러나 Predicate 클래스 중 하나는 Expression입니다. 내가 믿는 것은 당신이 찾고있는 것을해야합니다. 그러면 Predicate를 where 메소드 (배열, PredicateSet, Predicates, Where 클래스)에 전달하면된다.

Month() 컬럼을 만들고 having 절을 사용할 수도 있습니다. 예를 들면 다음과 같습니다.

$select->columns(array(
    new Expression("DISTINCT DATE_FORMAT(date, '%e')"), 
    'month' => new Expression("MONTH(date)"), 
) 
)->having(array('month' => $month)); 

두 가지 쿼리에서 사용하기 때문에 작동합니다. 그러나 Expression prediate를 사용하는 것이 더 좋은 방법 일 수 있습니다.

+1

위대한 ... 작동합니다! – allapow