2

我想在 yii 中转换这个查询

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);

但不会获取任何数据!我可以做些什么来获取数据?

4

3 回答 3

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 的答案。

于 2013-05-14T06:39:02.277 回答
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/

于 2013-05-14T04:44:52.520 回答
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();
于 2015-03-13T13:12:23.027 回答