1

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

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

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

谢谢你。

4

1 回答 1

1

那不是 Yii 问题,而是 PHP MySQL Logic 问题。

首先,为了提高性能,我建议使用 SELECT RAND() FROM Table,而不是 ORDER BY RAND()。

这将是一个重大改进。

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

在进入 unless 之前,最好的方法是通过可能使用您的预定义键之一来模拟它,并随机选择一个并通过 ASC\DESC 随机排序。

假设您有一个“日期”和一个“订单”字段。随机选择两者之一,并随机选择 ASC\DESC。

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

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

:)

于 2014-01-21T21:59:12.143 回答