Yii Framework Forum: Un dataprovider que reuna dos consultas a la misma tabla - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Un dataprovider que reuna dos consultas a la misma tabla Rate Topic: -----

#1 User is offline   JaCk0 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 14
  • Joined: 04-September 11

Posted 17 April 2012 - 05:38 AM

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
0

#2 User is offline   safitanet 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 38
  • Joined: 04-August 11

Posted 18 April 2012 - 06:30 AM

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
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users