首先,对不起我的英语。我需要一些帮助。最近我用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这样做,所以这是我的问题;是否有可能,如上所述这样做?我做错了什么,还是一个更复杂的问题?
提前感谢您的回复。
答案 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认为它是两个单独的选择值