如何在Yii中使用union two选择创建查询?

Vit*_*aly 3 php mysql yii

有一张桌子"公寓".这是需要在Yii中创建查询.怎么做?

SQL查询:

SELECT * 
FROM {{apartments}} 
WHERE agent_id = 4 
UNION 
SELECT * 
FROM {{apartments}} 
WHERE agent_id != 4
Run Code Online (Sandbox Code Playgroud)

在我的cintroller

$arrSql[] = 'SELECT * FROM {{apartments}} WHERE agent_id=:agent_id';
$arrSql[] = 'SELECT * FROM {{apartments}} WHERE agent_id!=:agent_id';
$data = Apartments::model()->findAllBySql(implode(' UNION ', $arrSql), array(
    ':agent_id' => Yii::app()->user->id,
    ':status' => Apartments::STATUS_REMOVED
));

$dataProvider = new CArrayDataProvider($data);
Run Code Online (Sandbox Code Playgroud)

但不是在我的小部件CGridList中工作分页和过滤.

Din*_*tro 6

据我所知,你可以这样使用CDbCommand:

$apartments2 = Yii::app()->db->createCommand()
    ->select("*")
    ->from('apartments')
    ->where('agent_id!=:agent_id', array(':agent_id'=>4))
    ->getText();

$apartments = Yii::app()->db->createCommand()
    ->select("*")
    ->from('apartments')
    ->where('agent_id=:agent_id', array(':agent_id'=>4))
    ->union($apartments2)
    ->queryRow();
Run Code Online (Sandbox Code Playgroud)

你可以在$apartments数组中找到你的结果.

编辑:

如果要使用CActiveDataProvider,则需要使用CSqlDataProvider:

$sql='SELECT * 
FROM {{apartments}} 
WHERE agent_id = 4 
UNION 
SELECT * 
FROM {{apartments}} 
WHERE agent_id != 4';

$dataProvider=new CSqlDataProvider($sql, array(
    'totalItemCount'=>$count,
    'sort'=>array(
        'attributes'=>array(
             'agent_id', //and all other atributes with withc you want to sort
        ),
    ),
    'pagination'=>array(
        'pageSize'=>10,
    ),
));
Run Code Online (Sandbox Code Playgroud)