Порядок Yii CActiveDataProvider и нумерация страниц

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

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

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

Спасибо.


person HermannHH    schedule 21.01.2014    source источник


Ответы (1)


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

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

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

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

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

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

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

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

:)

person André Catita    schedule 21.01.2014