CakePHP Paginatorgroup由/ order by

时间:2015-03-02 12:57:51

标签: mysql cakephp-2.0

查询:

SELECT  * from Entlehnungen 
WHERE status = 'retour' 
GROUP BY proben_id 
ORDER BY proben_id DESC, id DESC 

在蛋糕中我创建以下代码

unset($this->request->params['named']['sort']);
$this->Paginator->settings['Entlehnungen'] = array(
        'limit' => 500,
        'order' => array('Entlehnungen.proben_id' => 'DESC',
                         'Entlehnungen.id' => 'DESC'),
        'group' => array('Entlehnungen.proben_id')
);
$entlehnungens = $this->paginate(null, $conditions);

问题是,order by看起来不起作用。

2 个答案:

答案 0 :(得分:0)

恕我直言,问题出在这里:

GROUP BY proben_id ORDER BY proben_id DESC, id DESC

如果按一个字段分组,则意味着大多数字段将被随机选择。

所以,如果你有像

这样的数据
proben_id : id 
1    :    1
2    :    2
1    :    3 
2    :    4

您的查询结果是:

proben_id : id 
1    :    1
2    :    2

因此您无法按id

订购

所以如果你只有一个分组字段,那么

ORDER BY proben_id DESC, id DESC 相等 ORDER BY proben_id DESC

因为在proben_id之后无法订购 - 每个唯一proben_id只有1行

要获得二级订购,您需要将id字段作为分组字段:

GROUP BY proben_id, id ORDER BY proben_id DESC, id DESC

php代码应该是:

$this->Paginator->settings['Entlehnungen'] = array(
        'limit' => 500,
        'group' => array('Entlehnungen.proben_id','Entlehnungen.id'),
        'order' => array('Entlehnungen.proben_id' => 'DESC',
                         'Entlehnungen.id' => 'DESC')
);

答案 1 :(得分:0)

试试这个

'order' => array('Entlehnungen.proben_id DESC','Entlehnungen.idDESC'),