我想在Yii中使用CActiveDataProvider获取所有模型项。这些项目按rand()排序,并应用20的分页。这是我的代码:
$i = new CActiveDataProvider('Item',
array(
'criteria' => array(
'order'=>'RAND()',
),
'pagination' => array(
'pageSize' => 20 ,
),
)
);
我的问题是每当我通过分页链接更改页面时,项目都会重新排序。有没有办法解决这个问题?
谢谢。
答案 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选项。
:)