cakephp:排序 ASC 但末尾为 0 值
cakephp : Sort ASC but with 0 value at end
在查找请求中,如何按升序对数值进行排序但末尾为 0 值?
我要:[2,5,7,7,0,0]
$this->Resuls->find()
->order(['Resuls.sec'=>'asc']);
谢谢
根据 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');
这将生成类似于以下的 ORDER BY
子句:
ORDER BY
CASE WHEN Resuls.sec = 0 THEN 1 ELSE 0 END ASC,
Resuls.sec ASC
另见
在查找请求中,如何按升序对数值进行排序但末尾为 0 值?
我要:[2,5,7,7,0,0]
$this->Resuls->find()
->order(['Resuls.sec'=>'asc']);
谢谢
根据 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');
这将生成类似于以下的 ORDER BY
子句:
ORDER BY
CASE WHEN Resuls.sec = 0 THEN 1 ELSE 0 END ASC,
Resuls.sec ASC
另见