Php CSqlDataProvider处理数据后的yii排序

Php CSqlDataProvider处理数据后的yii排序,php,sorting,yii,Php,Sorting,Yii,我使用分页显示来自CSqlDataProvider的数据,我想为我的结果添加排序我的情况是-我使用分页获取数据 $dataProvider=new CSqlDataProvider($sqlAll, array( 'totalItemCount'=>$count, 'pagination'=>array('pageSize'=>$pageSize,), 'params' => $params

我使用分页显示来自CSqlDataProvider的数据,我想为我的结果添加排序
我的情况是-
我使用分页获取数据 $dataProvider=new CSqlDataProvider($sqlAll, array( 'totalItemCount'=>$count, 'pagination'=>array('pageSize'=>$pageSize,), 'params' => $params )); $dataProvider=新的CSqlDataProvider($sqlAll,数组( 'totalItemCount'=>$count, '分页'=>数组('pageSize'=>$pageSize,), “params”=>$params )); 在得到结果后,我计算了另外两个要显示的字段(未使用$sqlAll查询提取),并根据它们进行排序

我的问题是:我只得到$pagesize数量的结果,结果的排序是按$pagesize结果进行的,而不是从所有结果进行的。
我可以将计算字段添加到CSqlDataProvider或分页吗?

您可以通过以下两种方式之一添加计算字段:

  • 直接在查询和中计算两个字段的结果
  • 使用CArrayDataProvider并使用“手动”向其添加两个字段的查询结果的关联数组(使用获取此结果)中的数据填充它

  • 您是否有可能在SQL查询中使用limit?因为你应该把它留给数据提供者。限制是由分页和$pagesizeOk完成的,那么我建议尝试我答案中的方法1。尽管这可能会导致复杂的查询。这是最具可扩展性的解决方案。只有在确定结果记录集相对较小(或有性能差的风险)的情况下才使用方法2。这是一个非常复杂和耗时的查询……我想您可以发布一个关于查询以及如何优化其性能的问题;)也许有一个简单的解决方案或解决办法。或者可以应用一些缓存。无论哪种方式,我都必须看到查询(或它的原理)来帮助解决这个问题。对于这个问题,除了我给出的解决方案外,我看不到任何真正可行的解决方案(但那可能就是我;)。