2014-01-21 3 views
1

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

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

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

спасибо.

ответ

1

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

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

Это будет существенное улучшение.

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

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

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

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

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

:)

Смежные вопросы