【发布时间】:2011-10-26 14:54:49
【问题描述】:
给定下图:
使用下面的代码,我为每个组织分组了捐赠,现在我正在尝试计算给定成员向给定组织捐赠的总金额。
类似:
使用此代码,它可以根据我的需要正确地对组织进行分组,但我遇到的问题是,对于“捐赠给组织的金额”列,所有值都等于 ID 最高的组织的总数。因此,该列中的所有行都显示 $90
Yii 代码:
// member view
<?php
$dataProvider=new CActiveDataProvider(Donation::model(), array(
'criteria'=>array(
'with' => array(
'member' => array(
'on'=>'member.MemberId='.$model->MemberId,
'group' => 't.MemberId, t.OrganizationId',
'joinType'=>'INNER JOIN',
),
),
'together'=> true,
),
));
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns' => array(
array(
'name'=>'OrganizationId',
'value' => '$data->OrganizationId',
),
array(
'name'=>'Amount',
'value' => '$data->memberOrgBalance;',
),
),
));
?>
// member model
'memberOrgBalance' => array(self::STAT, 'Donation', 'MemberId',
'select'=>'MemberId, OrganizationId, SUM(Amount)',
'group' => 'OrganizationId'),
// donation model
'member' => array(self::BELONGS_TO, 'Member', 'MemberId'),
编辑:另见对 LDG 的回应
使用来自 LDG 的建议,我尝试将“有”添加到我的数据提供者中,当这似乎不影响查询时,我尝试将其添加到我试图提取数据的关系 memberOrgBalance 中。这似乎影响了查询,但仍然不对。我切换到:
'memberOrgBalance' => array(self::STAT, 'Donation', 'MemberId',
'select'=>'MemberId, OrganizationId, SUM(Amount)',
'group' => 'OrganizationId',
'having'=> 'MemberId=member.MemberId',
),
这给出了这个错误:
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]:
Column not found: 1054 Unknown column 'member.MemberId' in 'having clause'.
The SQL statement executed was: SELECT `MemberId ` AS `c`, MemberId, OrganizationId,
SUM(Amount) AS `s` FROM `donation` `t` WHERE (`t`.`MemberId `='2')
GROUP BY `MemberId `, OrganizationId HAVING (MemberId=member.MemberId)
这是没有意义的,因为从捐赠表中我定义了上面最初发布的关系。该查询似乎是按照我想要的方式获取每个组织的 SUM 所需的方向。还有其他想法吗?
【问题讨论】: