Учитывая следующую диаграмму:
С помощью приведенного ниже кода я сгруппировал пожертвования для каждой организации, и теперь я пытаюсь подсчитать общую сумму, которую данный участник пожертвовал данной организации.
Что-то вроде:
С помощью этого кода он правильно группирует те организации, которые мне нужны, но проблема, с которой я здесь сталкиваюсь, заключается в том, что для столбца «Сумма, пожертвованная организации» все значения равны общему количеству Организации с самым высоким 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)
Это не имеет смысла, так как из таблицы пожертвований у меня есть отношение, определенное так, как было первоначально размещено выше. Похоже, что запрос идет в направлении, необходимом для получения СУММ на организацию, как я хочу. Есть еще идеи?