0

我有一个存储用户 ID 和点的表。用户每次使用交易都会获得积分,这些积分存储在 UserPoints 中。它将为每个事务发布新行。

编号 | 用户名 | 积分

1 2 38

2 18 50

3 2 12

4 10 13

5 15 15

如上表,userID 2 有多行,我想添加 userId 2 的所有值。我想将计算放在变量totalPointsValue()内的模型MUserTotal中。

这是我到目前为止所拥有的

public function totalPointsValue() {

    user = $this->userId;

}         
4

2 回答 2

1

您需要的是静态查询

基本上,您在用户类上创建与 STAT 类型的 UserPoints 的关系,并指定标准:

<?php
class User extends CActiveRecord
{
    public function relations()
    {
        return array(
            'points'=>array(
                self::STAT, // Declare this relation as statical
                'user_points', // The table where you are storing the points
                'userId', // The foreign key on that table
                'select' => "SUM(points)", // make it SUM instead of default COUNT
                'group' => "userId" // Group by this field when adding points
            ),
        );
    }
}

之后,您可以像使用任何其他关系一样使用该关系:

<?php
$user = User::model()->findbyPk(1);
echo $user->points;
于 2013-10-14T18:25:28.960 回答
0

或者如果您需要创建模型 MUserTotal ...只需创建一个包含 userId 和他的点总和的视图,然后为该视图创建模型...查询将类似于
select user_id, sum(points)来自 user_points 组的 user_id

于 2013-10-14T19:47:41.030 回答