【问题标题】:Yii CActiveDataProvider Order and PaginationYii CActiveDataProvider 顺序和分页
【发布时间】:2015-12-04 16:57:49
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: php yii pagination cactivedataprovider


    【解决方案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 选项。

    :)

    【讨论】:

      猜你喜欢
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多