2

首先,对不起我的英语。我需要一些帮助。最近我用 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 做到这一点,所以这是我的问题;是否有可能按照说明执行此操作?我做错了什么,还是一个更复杂的问题?

提前感谢您的每一个回复。

4

1 回答 1

3

只需将选择指定为数组

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

您的代码的问题在于,由于您的select参数是一个字符串,Yii 尝试explod通过使用 a来获取所有列,,并且,您的IF语句中的 yii 将其视为两个单独的选择值

于 2012-07-02T07:38:31.810 回答