Привет, я использую версию CakePHP – 2.5.5.
У меня есть имя таблицы chat_ategory_mages
Я хочу получить среднее число порядков частоты по убыванию. Знайте о частоте, пожалуйста, проверьте – Как получить среднее число просмотров текущей даты в MySQL?
chat_ategory_mages
id chat_category_id hits created ------------------------------------------------ 1 5 10 2014-11-07 11:07:57 2 5 8 2014-11-10 05:10:20 3 5 70 2014-10-04 08:04:22
Код
$order=array('Frequency' => 'DESC'); $fields=array( 'ChatCategoryImage.id', 'ChatCategoryImage.chat_category_id', 'ChatCategoryImage.created', 'ChatCategoryImage.hits', 'hits/(DATEDIFF(NOW(),created)) AS Frequency', );
QUERY-1
$rndQry=$this->ChatCategoryImage->find('all',array('conditions'=>array('ChatCategoryImage.chat_category_id'=>$cetegory_id), 'fields'=>$fields, 'order'=>$order, 'limit'=>10)); pr($rndQry); //WORKING FINE
QUERY-2
//THIS IS NOT WORKING $this->Paginator->settings = array( 'conditions'=>array('ChatCategoryImage.chat_category_id'=>$cetegory_id), 'fields'=>$fields, 'limit' => 10, 'order' => $order, ); $getCategoryImages = $this->Paginator->paginate('ChatCategoryImage'); pr($getCategoryImages); //NOT WORKING
Выше таблицы, если я пишу простой запрос cakephp, order
работает нормально, но когда я использую cakephp pagination, он не работает. Если я использую $order=array('hits' => 'DESC');
это его волнующее совершенство. Показывая результат 70,10,8 последовательно, но когда я добавляю Frequency
результат не наступает в порядке убывания.
Запрос Mysql
QUERY-1:
SELECT ChatCategoryImage
. id
, ChatCategoryImage
. chat_category_id
, ChatCategoryImage
. hits
, ChatCategoryImage
. created
, hits / (DATEDIFF (NOW (), created)) AS Frequency, FROM myshowcam
. chat_category_images
AS ChatCategoryImage
WHERE ChatCategoryImage
. chat_category_id
= 5 ORDER BY Frequency
DESC LIMIT 10
QUERY-2:
SELECT ChatCategoryImage
. id
, ChatCategoryImage
. chat_category_id
, ChatCategoryImage
. hits
, ChatCategoryImage
. created
, hits / (DATEDIFF (NOW (), created)) AS Frequency, FROM myshowcam
. chat_category_images
AS ChatCategoryImage
WHERE ChatCategoryImage
. chat_category_id
= 5 LIMIT 10
В чем проблема и почему ее не придет ORDER BY Frequency
во втором запросе?
Спасибо, chinu
Вы можете использовать virtualFields
$this->ChatCategoryImage->virtualFields = array('Frequency' => 'hits/(DATEDIFF(NOW(),created))');
изменение порядка заказа
$order = array('Frequency' => 'desc');
Ваш код был не в порядке
$this->paginate = array( 'conditions' => array('ChatCategoryImage.chat_category_id'=>$cetegory_id), 'limit' => 10, 'order' => 'Frequency' => 'DESC'); $getAllCourses = $this->paginate('ChatCategoryImage');
Это случилось со мной. Вы должны добавить к функции paginate третий параметр $ whitelist. Например.
$this->Paginator->settings = array( 'conditions'=>array('ChatCategoryImage.chat_category_id'=>$cetegory_id), 'fields'=>$fields, 'limit' => 10, 'order' => $order, ); $scope = array(); $whitelist = array('ChatCategoryImage.id', ...); //The fields you want to allow ordering. $getCategoryImages = $this->Paginator->paginate('ChatCategoryImage', $scope, $whitelist); pr($getCategoryImages);
Я не знаю, почему это происходит. Я попытался увидеть код внутри функции paginate, но я не мог понять это.