Пользовательский SQL и GridView

Товарищи, прошу помощи.

Ситуация следующая: есть таблица в БД, данные хранятся криво, в одном поле несколько значений, разделенных "|", поэтому SQL выглядит след. образом:


SELECT callid, FROM_UNIXTIME( time ) AS disconnect_time, 

			IF( event = 'ABANDON', SUBSTRING_INDEX( data, '|' , -1 ), 

			SUBSTRING_INDEX( data, '|', 1 ) ) AS hold_time, 

			IF( event = 'ABANDON', 'No answer', 

			SUBSTRING_INDEX( SUBSTRING_INDEX( data, '|' , -2 ) , '|', 1 ) ) 

			AS call_time 

			FROM queue_log 

			WHERE (event = 'ABANDON' OR event LIKE 'COMPL%')

, то есть стандартную модель (CActiveRecod) не могу использовать, так как поля у меня извлекаются из составных значений, раздленных "|".

Переделать структуру нет возможности - данные постяться из внешнего приложения.

Задача: использовать CGridView для вывода данных из этой таблицы с сортировкой и пагинацией.

На форуме нашел пример, но сортировка и пагинация не работают:


$sql = "SELECT callid, FROM_UNIXTIME( time ) AS disconnect_time, 

			IF( event = 'ABANDON', SUBSTRING_INDEX( data, '|' , -1 ), 

			SUBSTRING_INDEX( data, '|', 1 ) ) AS hold_time, 

			IF( event = 'ABANDON', 'No answer', 

			SUBSTRING_INDEX( SUBSTRING_INDEX( data, '|' , -2 ) , '|', 1 ) ) 

			AS call_time 

			FROM queue_log 

			WHERE (event = 'ABANDON' OR event LIKE 'COMPL%')";


$dataProvider = new CSqlDataProvider($sql, 

	array('pagination'=>array('pageSize'=>'100')));

	

$this->widget('zii.widgets.grid.CGridView', array(

				'id'=>'statistic-grid',

                'dataProvider' => $dataProvider,

                'selectableRows'=>0, //Выделение строк (0,1,2)

                'cssFile'=>false,

                'summaryText'=>'Вывод {start}-{end} из {count}',

                'columns'=>array(

                	'callid',

                        'disconnect_time',

                        'hold_time',

                        'call_time',

                        /*array(

                                'class'=>'CButtonColumn',

                                'template' => '{update} {delete}',

                                'buttons'=>array('update' => array('label' => 'Редактировать')),

                                'deleteConfirmation'=>'Вы действительно хотите удалить эту позицию?',

                        ),

                )

));

Уваж. гуру, есть идеи?

C помощью пользователя lkg0dzre решение найдено!!! ;)


<?php 

$count=Yii::app()->db->createCommand("

	SELECT COUNT(*) FROM queue_log 

			WHERE (event = 'ABANDON' OR event LIKE 'COMPL%')")->queryScalar();

$sql = "SELECT callid, FROM_UNIXTIME( time ) AS disconnect_time, 

			IF( event = 'ABANDON', SUBSTRING_INDEX( data, '|' , -1 ), 

			SUBSTRING_INDEX( data, '|', 1 ) ) AS hold_time, 

			IF( event = 'ABANDON', 'No answer', 

			SUBSTRING_INDEX( SUBSTRING_INDEX( data, '|' , -2 ) , '|', 1 ) ) 

			AS call_time 

			FROM queue_log 

			WHERE (event = 'ABANDON' OR event LIKE 'COMPL%')";


$dataProvider=new CSqlDataProvider($sql, array(

    'totalItemCount'=>$count,

    'sort'=>array(

        'attributes'=>array(

             'callid', 'disconnect_time', 'hold_time', 'call_time',

        ),

    ),

    'pagination'=>array(

        'pageSize'=>5,

    ),

));


$this->widget('zii.widgets.grid.CGridView', array(

				'id'=>'statistic-grid',

                'dataProvider' => $dataProvider,

//                'selectableRows'=>0, //Выделение строк (0,1,2)

                'cssFile'=>false,

                'summaryText'=>'Вывод {start}-{end} из {count}',

                'columns'=>array(

                	array('name'=>'callid', 'header'=>'Call id'),

array('name'=>'disconnect_time', 'header'=>'Disconnect time'),

array('name'=>'hold_time', 'header'=>'Hold time'),

array('name'=>'call_time', 'header'=>'Call time'),

                )

));

?>

Уважаемый. Передалайте свои сообщения в удобочитаемый вид.

Вот так например:


$this->widget('zii.widgets.grid.CGridView', array(

'id'=>'statistic-grid',

'dataProvider' => $dataProvider,

// 'selectableRows'=>0, //Выделение строк (0,1,2)

'cssFile'=>false,

'summaryText'=>'Вывод {start}-{end} из {count}',

'columns'=>array(

array('name'=>'callid', 'header'=>'Call id'),

array('name'=>'disconnect_time', 'header'=>'Disconnect time'),

array('name'=>'hold_time', 'header'=>'Hold time'),

array('name'=>'call_time', 'header'=>'Call time'),

)

есть же специальная кнопка "<>" либо вручную пишите теги [ code] [ /code] без пробелов естественно.

Успехов.

Поправил.