помогите с запросом SQL в Yii - PullRequest
3 голосов
/ 14 августа 2011

Учитывая следующую диаграмму:

enter image description here

С помощью приведенного ниже кода я сгруппировал пожертвования для каждой организации, и теперь я пытаюсь подсчитать общую сумму, которую данный участник пожертвовал данной организации.

Что-то вроде:

enter image description here

С помощью этого кода он правильно группирует те организации, которые мне нужны, но проблема, с которой я здесь сталкиваюсь, заключается в том, что для столбца «Сумма, пожертвованная организации» все значения равны общему количеству Организации с самым высоким 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)

Это не имеет смысла, так как из таблицы пожертвований у меня есть отношение, определенное так, как было первоначально размещено выше. Похоже, что запрос идет в направлении, необходимом для получения СУММ на организацию, как я хочу. Есть еще идеи?

Ответы [ 3 ]

2 голосов
/ 14 августа 2011

Если я понимаю, что вы пытаетесь это сделать, может показаться, что вам нужно добавить атрибут «Имея», что-то вроде

'on'=>'member.MemberId = t.MemberId', 
'group' => 't.MemberId, t.OrganizationId',
'having'=> 't.MemberId=' . $model->MemberId
0 голосов
/ 18 августа 2011

Хорошо, после бега по кругу с этим кто-то смог подтолкнуть меня к решению проблемы на форумах Yii.

Конечный результат

$criteria->condition='member.MemberId="'.$model->MemberId.'"';
$criteria->with='member';
$criteria->select='MemberId,OrganizationId,sum(Amount) as Amount';
$criteria->group='t.MemberId,OrganizationId';
$dataProvider=new CActiveDataProvider(Donations::model(),
    array(
        'criteria'=>$criteria,

Спасибо ldg за помощь в этом.

0 голосов
/ 14 августа 2011

Требуется SQL-запрос.

select donation_org_id , sum(donation_amount) as donated_amount, count(d.donation_id) as members_count
from donations d
group by d.donation_org_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...