我试图在Yii中使用CActiveDataProvider获取所有的模型项目。这些项按rand()排序,并应用20的分页。这是我的密码:
$i = new CActiveDataProvider('Item',
array(
'criteria' => array(
'order'=>'RAND()',
),
'pagination' => array(
'pageSize' => 20 ,
),
)
);我的问题是,每当我通过分页链接更改页面时,项目就会被重新排序。有办法绕过这件事吗?
谢谢。
发布于 2014-01-21 21:59:12
这不是Yii问题,而是MySQL逻辑问题。
首先,为了提高性能,我建议使用SELECT RAND() FROM,而不是RAND()。
这将是一项重大改进。
其次,MYSQL是不值得的,因为大多数用户不会反复返回相同的页面,期望从相同的结果集中得到不同的结果。这是不可能的除非*.
在进入“除非”之前,最好的方法是通过使用预定义的一个键来模拟它,然后随机选择一个键,然后由ASC\DESC随机地对其进行排序。
假设你有一个“约会”和一个“订单”字段。随机挑选两个中的一个,然后随机选择。
*除非在会话中保存整个结果集,或者通过ajax控制分页,而不使用Yii集成的结果集。
既然你用的是Yii,我会建议我的假随机选项。
:)
https://stackoverflow.com/questions/21269781
复制相似问题