Un dataprovider que reuna dos consultas a la misma tabla

Hola, tengo un problema a la hora de mostrar unos resultados usando un CListView. Necesito mostrar el resultado de dos consultas compartiendo en el mismo CListView de la siguiente forma:

  • Tengo que hacer una consulta a una tabla que me va a devolver X filas.

  • Luego hago otra consulta a la misma tabla que me devuelve otras Y filas.

  • Quiero que se muestre ambos resultados en un mismo CListView de forma que aparezcan primero los resultados de la primera consulta y después los de la segunda.

La diferencia entre la primera consulta y la segunda es una columna en la que en la primera tiene que tener un valor mayor a Z y en la segunda un valor menor a Z. Había pensando en el comando de SQL Union, que permite unir dos o más consulta compartiendo un mismo resultado, pero no sé como aplicarlo a un dataProvider o si el mismo dataProvider permite realizar lo que yo necesito.

¿Alguien puede echarme una mano al respecto?

Gracias

Hola, una forma podría ser utilizando CArrayDataProvider para el CListView, y así construyes dos consultas en arrays separados y los unes en el orden que quieras:


$rawData1 = Yii::app()->db->createCommand('SELECT id, author, fecha FROM Post WHERE destacado=0')->queryAll();

$rawData2 = Yii::app()->db->createCommand('SELECT id, author, fecha FROM Post WHERE destacado=1')->queryAll();


$rawData = array_merge($rawData1, $rawData2);


$dataProvider = new CArrayDataProvider($rawData, array(

                    'id' => 'user',

                    'sort' => array(

                        'attributes' => array(

                            'id', 'author', 'fecha',

                        ),

                    ),

                    'pagination' => array(

                        'pageSize' => 10,

                    ),

                ));

       


        $this->render('index', array(

            'dataProvider' => $dataProvider,

        ));

Es más aconsejable utilizar CActiveDataProvider para el CListView, pero a lo mejor esto te podría servir…

En el CLisView los campos los recuperas con $data[‘id’], como array que es, las etiquetas del nombre del campo no lo sé…

Espero que te sirva de algo

Saludoooss