如果在Sum中结合了SQL查询,那么Yii ActiveRecord

时间:2012-07-01 09:35:04

标签: php mysql sql yii

首先,对不起我的英语。我需要一些帮助。最近我用Yii开始了我的第一个项目,一切都很棒,框架似乎很完美,但是我使用ActiveRecord从数据库中选择记录时遇到了一些问题。

假设我有以下代码:

$criteria = new CDbCriteria();
$criteria->select = '*, user.*, sum(if(points > 0, 1, 0)) as rank_points, sum(points) as all_points, count(*) as count_all';
$criteria->group = 'user_id';
$criteria->order = 'all_points desc';

$users = Types::model()
                ->with('user')
                ->findAll($criteria);

我有这个问题

sum(if(points > 0, 1, 0)) as rank_points

当我使用它时,我收到以下错误:

  

活动记录“类型”正在尝试选择无效列“sum(if(points> 0”)。注意,该列必须存在于表中或者是带别名的表达式。

问题是这个查询是正确的,我可以手动使用它,或者(我没试过,但我认为它应该可行)与查询构建器。我决心用AR这样做,所以这是我的问题;是否有可能,如上所述这样做?我做错了什么,还是一个更复杂的问题?

提前感谢您的回复。

1 个答案:

答案 0 :(得分:3)

只需将select指定为数组

即可
$criteria->select=array('*', 'sum(if(points > 0, 1, 0)) as rank_points','sum(points) as all_points', 'count(*) as count_all');

您的代码存在的问题是,由于您的select参数是一个字符串,Yii会尝试通过explod,获取所有列。你的,语句使yii认为它是两个单独的选择值