如何通过查询将count(*)和group转换为yii并从中获取数据

时间:2013-05-14 04:06:59

标签: select yii count

我想在yii中转换此查询

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

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

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

但没有数据会被抓取! 我可以做些什么来获取数据?

3 个答案:

答案 0 :(得分: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的答案。

答案 1 :(得分:3)

请尝试以下代码

     $logs = Yii::app()->db->createCommand()
            ->select('COUNT(*) as cnt')
            ->from('tbl_log')  //Your Table name
            ->group('date') 
            ->where('status=2') // Write your where condition here
            ->queryAll(); //Will get the all selected rows from table

访客人数:

    echo count($logs); 

除了使用cDbCriteria之外,要检查此链接http://www.yiiframework.com/forum/index.php/topic/10662-count-on-a-findall-query/

答案 2 :(得分: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();