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。
謝謝。
您始終可以創建虛擬字段 - 這是您應該在此處執行的操作。集團仍然有效! – mark
問題是,當使用virtualFields時,我得到'subquery包含多個行',因爲流量表有很多webmaster_site_id。 –
這不是虛擬字段的問題,而是查詢本身。設計失敗,因此無法使用或不使用虛擬字段。 afaik COUNT()無法按照您希望它在此處工作的方式工作。 – mark