【问题标题】:CakePHP order not workingCakePHP 订单不起作用
【发布时间】:2015-01-07 16:41:18
【问题描述】:

您好,我使用的是 CakePHP 版本 - 2.5.5。

我有一个表名chat_ategory_mages 我想按降序获得平均频率顺序数。了解频率请查看 - How to get Average hits between current date to posted date in 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 分页时它不起作用。如果我使用$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 频率, 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 频率, FROM myshowcam.chat_category_images AS ChatCategoryImage WHERE ChatCategoryImage.chat_category_id = 5 限制 10

问题是什么?为什么它没有在第二个查询中出现ORDER BY Frequency

谢谢 中国

【问题讨论】:

    标签: php mysql cakephp


    【解决方案1】:

    你的代码有点错误

        $this->paginate = array(
                       'conditions' => array('ChatCategoryImage.chat_category_id'=>$cetegory_id), 
                       'limit' => 10, 'order' => 'Frequency' => 'DESC');
        $getAllCourses = $this->paginate('ChatCategoryImage');
    

    【讨论】:

    • 不是$this->Paginator->settings 不是$getAllCourses = $this->paginate('ChatCategoryImage');
    【解决方案2】:

    这发生在我身上。您必须将第三个参数 $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);
    

    我不知道为什么会这样。我试图查看分页函数中的代码,但我无法弄清楚。

    【讨论】:

    • 不 :( 它不起作用。顺便说一下,我的 Frequency 是别名字段名称。所以它没有按顺序显示
    【解决方案3】:

    你可以使用 virtualFields

    $this->ChatCategoryImage->virtualFields = array('Frequency' => 'hits/(DATEDIFF(NOW(),created))');
    

    改变订购方式

    $order = array('Frequency' => 'desc');
    

    【讨论】:

    • Abhisek 您的代码也无法正常工作。同样的结果来了。选择ChatCategoryImage.id, ChatCategoryImage.chat_category_id, ChatCategoryImage.hits, ChatCategoryImage.created, hits/(DATEDIFF(NOW(),created)) AS 频率来自@9876543 @.chat_category_images AS ChatCategoryImage WHERE ChatCategoryImage.chat_category_id = 13 LIMIT 10
    • 你能给我看你之前试过的QUERY-2的代码吗?我实际上尝试了与您相同的案例,并且我发布的内容有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多