2014-06-24 3 views
15

에 내가 쿼리 사용 yii2 다음 생성하고자하는 의해 : 나는 시도어떻게 계산 및 그룹 yii2

SELECT COUNT(*) AS cnt FROM lead WHERE approved = 1 GROUP BY promoter_location_id, lead_type_id

:

SELECT COUNT(*) FROM (SELECT * FROM `lead` WHERE approved = 1 GROUP BY `promoter_location_id`, `lead_type_id`) `c` 
:이 쿼리를 생성

$leadsCount = Lead::find() 
->where('approved = 1') 
->groupBy(['promoter_location_id', 'lead_type_id']) 
->count(); 

yii 1.x에서 다음을 수행했습니다.

$criteria = new CDbCriteria(); 
$criteria->select = 'COUNT(*) AS cnt'; 
$criteria->group = array('promoter_location_id', 'lead_type_id'); 

고마워요!

+0

mysql 쿼리를 작성하려면 create 명령을 사용할 수 있습니다. – Kshitiz

+0

답변을 해결책으로 게시하십시오. – Cthulhu

답변

20

솔루션 :

$leadsCount = Lead::find() 
->select(['COUNT(*) AS cnt']) 
->where('approved = 1') 
->groupBy(['promoter_location_id', 'lead_type_id']) 
->all(); 

내 경우 리드에, 모델에 public $cnt를 추가합니다.

Kshitiz도 언급했듯이 yii\db\Query::createCommand()을 사용할 수도 있습니다.

+0

Oki, 성공 감사합니다 – MrBii

+0

이게 작동하고 모델 변수에 public 변수를 추가하고 @deacs로 언급하고 all ​​() 메소드를'-> createCommand() -> queryAll();로 바꾸어야했습니다. 내 select() 메소드는 여러 개의'-> select ([ 'type, date (significant_timestamp) AS significant_timestamp, COUNT (*) AS size']) ' –

5

카운트에 관심이 있다면 다른 사람들이 언급 한대로 yii\db\Query을 사용하십시오. 모델에 대한 변경이 필요하지 않음 : 여기

$leadsCount = (new yii\db\Query()) 
    ->from('lead') 
    ->where('approved = 1') 
    ->groupBy(['promoter_location_id', 'lead_type_id']) 
    ->count(); 

하면 선택 쿼리

$leadCount = Lead::find() 
->where(['approved'=>'1']) 
->groupBy(['promoter_location_id', 'lead_type_id']) 
->count(); 

수()를 사용하여 수를 얻을 수있는 Yii2 API documentation

0

$cnt prope 모델 번호

$leadsCount = Lead::find() 
->select(['promoter_location_id', 'lead_type_id','COUNT(*) AS cnt']) 
->where('approved = 1') 
->groupBy(['promoter_location_id', 'lead_type_id']) 
->createCommand()->queryAll(); 
+1

코드를 게시 할뿐만 아니라 몇 가지 단어를 추가하여 차이점은. – mkl

+0

하지만 결과적으로 ActiveRecords가 아닙니다. –