[英]How to use SUM in cdbCriteria in yii?
我有这个代码,它显示了所有每日退订用户..
public function getdailyUnSubs($modelName,$op){
$currentDate = date('Ymd');
$criteria = new CDbCriteria;
$criteria->select = 'app_unsubs,sms_unsubs';
$criteria->order = 'date DESC';
$criteria->limit = 1;
$criteria->offset = 0;
$Subscriber = $modelName::model()->find($criteria);
$totalunSubs = $Subscriber['app_unsubs']+$Subscriber['sms_unsubs'];
return $totalunSubs;
}
但是现在我想获得到目前为止所有未订阅的用户。 我想要所有未订阅用户的总和。
这是我的代码,但它不起作用。
public function getTotalUnSubs($modelName,$op){
$criteria = new CDbCriteria;
$criteria->select ='sum(app_unsubs) as appunsubs, sum(sms_unsubs) as smsunsubs';
$Subscriber = $modelName::model()->find($criteria);
$totalunSubs = $Subscriber['appunsubs']+$Subscriber['smsunsubs'];
return $totalunSubs;
}
它说appunsubs
和smsunsubs
没有定义。
即使我将代码更改为
$criteria->select ='(sum(app_unsubs)+ sum(sms_unsubs)) as totalunsubs';
和
$totalunSubs = $Subscriber['totalunsubs'];
它仍然说totalunsubs
是未定义的。
您有未定义的appunsubs
和smsunsubs
因为$modelName
模型类中没有类似的字段。 要获取数据,您可以根据条件创建查询并使用Yii::app()->db->createCommand($sql)->queryRow()
执行此查询。 看看这个代码:
public function getTotalUnSubs($modelName,$op)
{
$criteria = new CDbCriteria;
$criteria->select ='sum(app_unsubs) as appunsubs, sum(sms_unsubs) as smsunsubs';
//creating proper SQL
$sql = Yii::app()->db->commandBuilder->createFindCommand($modelName, $criteria)->getText();
//fetching data based on created SQL stored in $sql variable
$Subscriber = Yii::app()->db->createCommand($sql)->queryRow();
$totalunSubs = $Subscriber['appunsubs']+$Subscriber['smsunsubs'];
return $totalunSubs;
}
我认为您必须将Group By设置为您的查询。
所以代码现在是这样的。
public function getTotalUnSubs($modelName,$op){
$criteria = new CDbCriteria;
$criteria->select ='sum(app_unsubs) as appunsubs, sum(sms_unsubs) as smsunsubs';
$criteria->group='table primary key';
$Subscriber = $modelName::model()->find($criteria);
$totalunSubs = $Subscriber['appunsubs']+$Subscriber['smsunsubs'];
return $totalunSubs;
}
简单的解决方案是将公共或受保护的变量名称作为 sum 添加到模型中。 我建议使用它,因为我称之为“子模型”......
class Summary extends CActiveRecord {
public $total;
}
class Item extends Summary {
...
}
然后您可以在标准中自由使用计数或总和,它们将在使用 find、findAll 等检索的模型中显示为变量。
$criteria = new CDbCriteria();
$criteria->select = "count(id) as total,type,lang,source";
$criteria->group = "lang,source,type";
$result = Item::model()->findAll($criteria);
结果是:(例如)
array(1) {
[0]=>
object(Item)#48 (12) {
["total"]=>
string(2) "50"
这些子模型非常适合将您的函数、关系和其他东西保留在那里,就好像该类需要从 Gii 自动生成一样,您只需要将 extends CActiveRecord 替换为 extends SubmodelName...
此外,这些年来,我开发了 Base(模型),设置了我一般需要的一切(user_id 到登录用户,检查日期格式是否正确等)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.