cakephp:对ASC进行排序,但末尾的值为0

cakephp:对ASC进行排序,但末尾的值为0,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,在查找请求中,如何按升序对数值排序,但在末尾有0值 我想要:[2,5,7,7,0,0] $this->Resuls->find() ->order(['Resuls.sec'=>'asc']); 谢谢根据数据库管理系统的不同,有多种方法可以实现这一点 在CakePHP支持的所有DBMS上工作的一种方法可能是使用CASE语句,首先将results.sec为0的行排序到后面,然后按results.sec的顺序定期升序,这将得到您要查找的结果 $query = $this

在查找请求中,如何按升序对数值排序,但在末尾有0值

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

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

谢谢

根据数据库管理系统的不同,有多种方法可以实现这一点

在CakePHP支持的所有DBMS上工作的一种方法可能是使用
CASE
语句,首先将
results.sec
0
的行排序到后面,然后按
results.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子句,类似于:

orderby
当results.sec=0时,则1否则0结束ASC,
结果秒ASC
另见


  • 非常好。
    newExpr()->add()
    函数做什么?它添加了什么?@cgTag它将条件添加到
    QueryExpression
    对象中,该对象由
    newExpr()
    返回。谢谢,它工作得很好!今天我学到了一些东西;-)