2012-07-01 37 views
2

首先,對不起我的英文。我需要一些幫助。最近我開始了Yii的第一個項目,並且一切都很好,框架似乎是完美的,但是我使用ActiveRecord從數據庫中選擇記錄時遇到了一些問題。如果總和在SQL查詢中合併,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 

問題,當我使用它,我得到以下錯誤:

Active record "Types" is trying to select an invalid column "sum(if(points > 0". Note, the column must exist in the table or be an expression with alias.

問題是這個查詢是正確的,我可以手動使用它,或者(我沒有嘗試但我認爲它應該可以)與查詢生成器。我決心用AR來做到這一點,所以這是我的問題。是否有可能按照規定來做到這一點?我做錯了什麼,還是更復雜的問題?

在此先感謝您的回覆。

+0

您是否將rank_points定義爲類中的屬性? – Skatox

+0

@Skatox我沒有,但我定義了它,而且我有同樣的錯誤。還有什麼,我已經定義了模型中的all_points和count_all屬性,並且它正常工作。 –

回答

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,,並在,荷蘭國際集團的IF聲明使yii將其視爲兩個單獨的選擇值

+0

我可以向你保證,我以前試過,沒有成功,但我只是再試一次,因爲你說,它的運作正常,我不知道它是什麼樣的魔法,但非常感謝,無論如何,我會知道什麼要做的功能:) –