Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.8k views
in Technique[技术] by (71.8m points)

how to convert mysql subquery in yii CDbCriteria?

how to convert mysql subquery to yii CDbCriteria
table list:
1) user_group
2) user_group_data
3) user_group_data_revision

select * from (
         select
         ugd.group_id as group_id,
         ug.user_id as user_id,
         ugd.id as group_data_id,
         ugd.group_name as group_name, 
         ugd.group_description as group_description,
         ugd.email as group_admin_email,
         ugd.image as group_image,
         ugd.group_type as group_type,
         ugd.request_type as group_request_type,
         ugdr.revision_version as revision_version,
         ugdr.admin_approve as revision_approve_status,
         ugdr.publish as revision_publish,
         ugdr.created_at as revision_created_at
         from user_group_data_revision ugdr
         left join user_group_data ugd on ugdr.group_data_id = ugd.id
         left join user_group ug on ugdr.group_id = ug.id
         order by `revision_version` desc
        ) rgd group by rgd.group_id
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Here a small example(if I correctly understood structure/relations):

//Model UserGroupDataRevision
class UserGroupDataRevision extends CActiveRecord 
{
     public function relations()
     {
        return array(
            'userGroup' => array(self::BELONGS_TO, 'UserGroup', 'group_id'),
            'userGroupData' => array(self::BELONGS_TO, 'UserGroupData', 'group_data_id'),
        );
     }
     //....
}

//model UserGroup
class UserGroup extends CActiveRecord {...}
//model UserGroupData
class UserGroupData extends CActiveRecord {...}

Criteria:

$criteria = new CDbCriteria();
$criteria->select = 'ugdr.revision_version'; // other fields
$criteria->alias = 'ugdr';
$criteria->with = array(
        'userGroup' => array(
        'alias' => 'ug',
        'together' => true,
        'select' => array('ug.user_id'), // other fields
    ),
    'userGroupData' => array(
        'alias'=> 'ugd',
        'together' => true,
        'select'=>array('ugd.group_id, ugd.group_name'), // other fields
    ),
);
$criteria->group = 'rgd.group_id';
$criteria->order = 'rgd.group_id'; // or something else

Data checking:

$dataProvider = new CActiveDataProvider('UserGroupDataRevision', array(
      'criteria' => $criteria,
   )
);
var_dump($dataProvider->getData());
die();

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...