在查找请求中,如何按升序对数值进行排序,但结尾处的值为0?
我想:[2,5,7,7,0,0]
$this->Resuls->find()
->order(['Resuls.sec'=>'asc']);
由于
答案 0 :(得分:3)
根据DBMS,有各种方法可以实现这一目标。
应该对CakePHP支持的所有DBMS起作用的方法可能是使用CASE
语句首先将Resuls.sec
为0
的行排序到后面,之后按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
另见