2013-05-14 22 views
2

我想把这个查询转换成警予如何转换COUNT(*)和组通过查询警予,并从它

SELECT count(*) AS cnt, date(dt) FROM tbl_log where status=2 GROUP BY date(dt) 

,并获取从数据中获取数据。我试试这个命令(dt是时间字段):

$criteria = new CDbCriteria(); 
$criteria->select = 'count(*) as cnt, date(dt)'; 
$criteria->group = 'date(dt)'; 
$criteria->condition = 'status= 2'; 
$visit_per_day = $this->findAll($criteria); 

但没有数据将获取!wath我可以做什么来获取数据?

回答

4

也许你看不到任何数据,因为您需要将数据分配给不存在的模型属性。

$criteria = new CDbCriteria(); 
$criteria->select = 'count(*) AS cnt, date(dt) AS dateVar'; 
$criteria->group = 'date(dt)'; 
$criteria->condition = 'status= 2'; 
$visit_per_day = $this->findAll($criteria); 

这意味着您的模型必须具有属性cnt和dateVar才能显示数据。如果您需要自定义查询,请检查Hearaman的答案。

+0

如何获得CNT值?我想这样$ visit_per_day-> cnt。但不工作 – 2015-05-11 09:52:36

0

如果使用Yii2并具有基于表tbl_log一个模型,可以做到在这样的模型风格:

$status = 2; 
$result = Model::find() 
    ->select('count(*) as cnt, date(dt)') 
    ->groupBy('date(dt)') 
    ->where('status = :status') 
    ->params([':status' => $status ]) 
    ->all();