2013-10-25 19 views
0

我的分頁設置是這樣的:如何在CakePHP中使用SUM,COUNT和GROUP BY對複雜的分頁數組進行排序?

 $this->Paginator->settings = array(
      'limit' => 100, 
      'order' => 'Traffic.accessed DESC', 
      'conditions' => array(
       'Traffic.webmaster_site_id' => $this->WebmasterSite->find('list', array(
        'fields' => 'WebmasterSite.id', 
        'conditions' => array(
         'WebmasterSite.user_id' => $this->Auth->user('id') 
        ) 
       )) 
      ), 
      'fields' => 'DATE(Traffic.accessed) AS `access_date`, 
         SUM(Traffic.webmaster_site_transfer) as total_webmaster_income, 
         COUNT(Traffic.webmaster_site_id) as total_webmaster_clicks', 
      'group' => 'DATE(Traffic.accessed)', 
      'paramType' => 'querystring' 
     ); 

     $click_data = $this->Paginator->paginate('Traffic'); 

     $this->set('click_data', $click_data); 

,並鑑於

<th class="text-center"> 
    <?php if ($this->Paginator->sortKey() == 'Traffic.total_webmaster_clicks') { 
     if ($this->Paginator->sortDir() == 'asc') { 
      $sort_icon = '<i class="icon-sort-up"></i> '; 
     } else { 
      $sort_icon = '<i class="icon-sort-down"></i> '; 
     } 
    } else { 
     $sort_icon = '<i class="icon-sort"></i> '; 
    } ?> 
    <?php echo $this->Paginator->sort('Traffic.total_webmaster_clicks',$sort_icon.__('Total Clicks'),array('escape'=>false)); ?> 
</th> 

因此,通過Traffic.total_webmaster_clicks它不排序。請注意,這來自分頁語句中的AS total_webmaster_clicks

我不明白我該如何使用這種類型的(AS選定的)字段和GROUP BY進行排序。加上我不能創建virtualFields,因爲有一個DATETIME字段的GROUP BY。

謝謝。

+0

您始終可以創建虛擬字段 - 這是您應該在此處執行的操作。集團仍然有效! – mark

+0

問題是,當使用virtualFields時,我得到'subquery包含多個行',因爲流量表有很多webmaster_site_id。 –

+0

這不是虛擬字段的問題,而是查詢本身。設計失敗,因此無法使用或不使用虛擬字段。 afaik COUNT()無法按照您希望它在此處工作的方式工作。 – mark

回答

0

對於複雜的查詢默認排序不起作用,所以你應該創建一個視圖並使用視圖相同的模型,你一定會得到與排序分頁。並且通過使用視圖,您的應用程序性能也將提高

相關問題