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

使用すると、次のエラーが発生します。

アクティブレコード「Types」が無効な列「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がaを使用してすべての列を取得しようとし、ステートメント内のinがyiiに2つの別個の選択値と見なさせることですexplod,,IF

于 2012-07-02T07:38:31.810 に答える