cakephp:对ASC进行排序,但结尾为0

问题描述 投票:1回答:1

在查找请求中,如何按升序对数值进行排序,但在结束时使用0值?

我想:[2,5,7,7,0,0]

$this->Resuls->find()
  ->order(['Resuls.sec'=>'asc']);

谢谢

cakephp cakephp-3.0
1个回答
3
投票

根据DBMS,有各种方法可以实现这一目标。

应该对CakePHP支持的所有DBMS起作用的方法可能是使用CASE语句来首先排序Resuls.sec0的行到后面,然后在Resuls.sec regulary上升的顺序之后,这应该得到你的结果寻找。

$query = $this->Resuls->find();

$zeroLastCase = $query->newExpr()->addCase(
    [$query->newExpr()->add(['Resuls.sec' => 0])],
    [1, 0],
    ['integer', 'integer']
);

$query
    ->orderAsc($zeroLastCase)
    ->orderAsc('Resuls.sec');

这将产生类似于以下的ORDER BY条款:

ORDER BY 
    CASE WHEN Resuls.sec = 0 THEN 1 ELSE 0 END ASC, 
    Resuls.sec ASC

也可以看看

© www.soinside.com 2019 - 2024. All rights reserved.