Могу ли я выполнить два или более оператора SQL, используя yii CSqlDataProvider? - PullRequest
1 голос
/ 26 января 2012

Я пытаюсь получить несколько результатов для следующих операторов SQL, используя yii, но что-то не так ....

 $sql="SET @pStat=-1; SET @pdt=0;  SELECT * FROM (SELECT !li.gen  AS id,li.logAt, getDuration(gen,logAt) AS duration FROM os_loggerinfo li ) AS a WHERE a.duration>0;";

$count=count(Yii::app()->db->createCommand($sql)->query()); 

$dataProvider=new CSqlDataProvider($sql, array(
            'totalItemCount'=>$count,
            'pagination'=>array(
                'pageSize'=> 10,
            ),
        ));

Ответы [ 3 ]

1 голос
/ 26 января 2012

Вы используете count(Yii::app()->db->createCommand($sql)->query());, я не уверен, но я думаю, query() просто возвращает true или false. попробуйте использовать queryAll() или, если используется только одна строка, queryRow()

0 голосов
/ 31 мая 2014

Попробуйте использовать CArrayDataProvider вместо CSqlDataProvider:

$sql="SET @pStat=-1; SET @pdt=0;  SELECT * FROM (SELECT !li.gen  AS id,li.logAt, getDuration(gen,logAt) AS duration FROM os_loggerinfo li ) AS a WHERE a.duration>0;";
$result=Yii::app()->db->createCommand($sql)->queryAll(); 
$count=count($result);
$dataProvider=new CArrayDataProvider($result, array(
            'totalItemCount'=>$count,
            'pagination'=>array(
                'pageSize'=> 10,
            ),
        ));
0 голосов
/ 20 марта 2012
$sql="SET @pStat=-1; SET @pdt=0;  SELECT |selectPart| FROM (SELECT !li.gen  AS id,li.logAt, getDuration(gen,logAt) AS duration FROM os_loggerinfo li ) AS a WHERE a.duration>0;";
$selectPart = 'COUNT(1) as cnt';
$count = Yii::app()->db->createCommand(str_replace('|selectPart|', $selectPart, $sql))->queryScalar();
$sql = str_replace('|selectPart|','*',$sql);
$dataProvider=new CSqlDataProvider($sql, array(
        'totalItemCount'=>$count,
        'pagination'=>array(
            'pageSize'=> 10,
        ),
    ));
...