【问题标题】:If in Sum combined in SQL query, and Yii ActiveRecord如果在 Sum 中结合 SQL 查询,以及 Yii ActiveRecord
【发布时间】:2012-07-01 09:35:03
【问题描述】:

首先,对不起我的英语。我需要一些帮助。最近我用 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

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

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

问题是这个查询是正确的,我可以手动使用它,或者(我没有尝试过,但我认为它应该可以)使用查询生成器。我决心用 AR 做到这一点,所以这是我的问题;是否有可能按照说明执行此操作?是我做错了什么,还是一个更复杂的问题?

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

【问题讨论】:

  • 你有 rank_points 定义为你的类中的一个属性吗?
  • @Skatox 我没有,但我定义了它,我遇到了同样的错误。还有什么,我已经在模型中定义了 all_points 和 count_all 属性并且它工作正常。

标签: php mysql sql yii


【解决方案1】:

只需将选择指定为数组

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

您的代码的问题在于,由于您的 select 参数是一个字符串,Yii 尝试使用 ,, 获取所有列将其视为两个单独的选择值

【讨论】:

  • 我可以向你保证,我以前试过这个,但没有成功,但我只是按照你说的再试一次,效果很好,我不知道这是什么魔法,但真的无论如何,谢谢,我会知道在功能中做什么:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多