我想在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);
但没有数据会被抓取! 我可以做些什么来获取数据?
答案 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();