Yii CActiveDataProvider Порядок и разбиение на страницы

Я пытаюсь получить все элементы модели с помощью CActiveDataProvider в Yii. Эти элементы отсортированы по rand() и применяется нумерация страниц по 20. Вот мой код:

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

Моя проблема заключается в том, что элементы меняются, когда я меняю страницы с помощью нумерации страниц. Есть ли способ обойти это?

Спасибо.

1 ответ

Решение

Это не проблема Yii, это проблема PHP MySQL Logic.

Прежде всего, я бы предложил для повышения производительности использовать SELECT RAND() FROM Table вместо ORDER BY RAND().

Это будет серьезным улучшением.

Во-вторых, MYSQL RAND чего-то не стоит, так как большинство пользователей не возвращаются неоднократно на одни и те же страницы, ожидая разных результатов от одного и того же набора результатов. И это просто невозможно, если *..

Прежде чем переходить к типу "исключение", предпочтительный способ сделать это - смоделировать его, возможно, используя один из ваших предварительно определенных ключей, и выбрать его случайным образом, а также упорядочить его случайным образом с помощью ASC\DESC.

Скажем, у вас есть поле "дата" и "заказ". Выберите один из двух случайным образом, и ASC \ DESC randmoly.

* если вы не сохранили весь набор результатов в СЕССИИ или не управляли пагинацией через ajax и не используете интегрированный Yii.

Поскольку вы используете Yii, я бы предложил свой вариант случайного подделки.

:)

Другие вопросы по тегам