1

我试图在使用 yii 的以下 sql 语句上得到很少的结果,但是有一些问题......!!!

 $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,
            ),
        ));
4

3 回答 3

1

您正在使用count(Yii::app()->db->createCommand($sql)->query());,我不确定,但我认为query()只是返回真或假。尝试使用queryAll(),或者如果它只是单行使用queryRow()

于 2012-01-26T15:19:43.313 回答
0

尝试使用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,
            ),
        ));
于 2014-05-31T19:19:23.990 回答
0
$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,
        ),
    ));
于 2012-03-20T07:41:43.590 回答