Yii CActiveDataProvider订单和分页

时间:2014-01-21 21:47:58

标签: php yii pagination cactivedataprovider

我想在Yii中使用CActiveDataProvider获取所有模型项。这些项目按rand()排序,并应用20的分页。这是我的代码:

    $i = new CActiveDataProvider('Item', 
        array(  
            'criteria' => array(
                'order'=>'RAND()',
            ),
            'pagination' => array( 
                'pageSize' => 20 ,
            ),
        )
    );

我的问题是每当我通过分页链接更改页面时,项目都会重新排序。有没有办法解决这个问题?

谢谢。

1 个答案:

答案 0 :(得分:1)

这不是Yii问题,它是PHP MySQL逻辑问题。

首先,我建议性能改进使用SELECT RAND()FROM Table,而不是ORDER BY RAND()。

这将是一项重大改进。

其次,MYSQL RAND是不值得的,因为大多数用户不会反复回到相同的页面,期望来自同一结果集的不同结果。除非* ..

,否则这是不可能的

在进入除非之前,首选的方法是通过使用一个预定义的键来模拟它,然后随机选择一个并按ASC \ DESC随机排序。

假设您有'日期'和'订单'字段。 随机选择其中一个,并选择ASC \ DESC randmoly。

*除非您将整个结果集保存在SESSION中,或者您通过ajax控制您的分页,并且不使用Yii集成的分页。

由于您使用的是Yii,我建议使用我的FAKE RANDOM选项。

:)