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

时间:2017-12-23 17:29:18

标签: cakephp cakephp-3.0

在查找请求中,如何按升序对数值进行排序,但结尾处的值为0?

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

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

由于

1 个答案:

答案 0 :(得分:3)

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

应该对CakePHP支持的所有DBMS起作用的方法可能是使用CASE语句首先将Resuls.sec0的行排序到后面,之后按Resuls.sec常规递增,可以获得您正在寻找的结果。

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

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

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

这将产生类似于:{/ p>的ORDER BY子句

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

另见