2012-07-01 3 views
2

우선 영어로 죄송합니다. 이걸 좀 도와 줘. 최근에 Yii로 첫 프로젝트를 시작했는데 모든 것이 훌륭하고 프레임 워크가 완벽 해 보이지만 ActiveRecord를 사용하여 데이터베이스에서 레코드를 선택하는 데 약간의 문제가 있습니다.합계가 SQL 쿼리와 Yii ActiveRecord에 결합 된 경우

의 내가 다음 코드했다고 가정 해 봅시다 : 나는 그것을 사용하고 때이

sum(if(points > 0, 1, 0)) as rank_points 

에 문제가

$criteria = new CDbCriteria(); 
$criteria->select = '*, user.*, sum(if(points > 0, 1, 0)) as rank_points, sum(points) as all_points, count(*) as count_all'; 
$criteria->group = 'user_id'; 
$criteria->order = 'all_points desc'; 

$users = Types::model() 
       ->with('user') 
       ->findAll($criteria); 

, 내가받을 다음과 같은 오류 :

Active record "Types" is trying to select an invalid column "sum(if(points > 0". Note, the column must exist in the table or be an expression with alias.

문제는이 쿼리가 정확하고 수동으로 사용할 수 있습니다. (시도하지는 않았지만 작동해야한다고 생각합니다) 쿼리 빌더. 나는 AR과 함께 이것을하기로 결심했다. 그래서 여기에 나의 질문이있다; 진술 한대로 이것을 할 수 있습니까? 나는 잘못된 것을하고 있습니까? 아니면 더 복잡한 문제입니까?

미리 답변 해 주셔서 감사합니다.

+0

클래스의 특성으로 rank_points가 정의되어 있습니까? – Skatox

+0

@Skatox 나는 가지고 있지는 않았지만, 정의했다. 그리고 나는 똑같은 오류가있다. 그 외, 모델의 all_points 및 count_all 속성을 정의했으며 올바르게 작동합니다. –

답변

3

는 그냥 배열로 선택을 지정

$criteria->select=array('*', 'sum(if(points > 0, 1, 0)) as rank_points','sum(points) as all_points', 'count(*) as count_all'); 

코드의 문제는 select 매개 변수 문자열을 한, YII는 ,와의 ,로 보내고 explod 모든 열을 얻으려고한다는 것입니다 귀하의 IF 문을 사용하면 yii가 두 개의 별개 선택 값으로 생각할 수 있습니다.

+0

나는 당신에게 내가 성공하기 전에 이것을 시도했다는 것을 당신에게 약속 할 수있다.하지만 나는 당신이 말한대로 그것을 다시 시도한다. 그리고 그것은 공정하게 일하고있다. 나는 그것이 어떤 종류의 마법인지 모른다. 그러나 어쨌든 정말로 감사한다. 기능에서 할 :) –

관련 문제