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, я бы предложил свой вариант случайного подделки.
:)