Doctrine 2 Order By ASC和Null值

Dee*_*yal 7 sql-order-by doctrine-orm

我正在尝试获取结果,我需要按升序排序.但是一些值将为null/empty,我需要在最后排序时从0 1 2开始,然后是null值.

我尝试过SortableNullsWalker但它没有帮助.我正在排序的值不是列,它是正在排序的两个值的乘法,这就是为什么我认为SortableNullsWalker不起作用.请帮忙

$dql = 'SELECT (column1 * column2) as distance FROM table)

                ORDER BY distance ASC ';

        $dq = $this->getEntityManager()->createQuery($dql);
Run Code Online (Sandbox Code Playgroud)

结果如下 '', '', 0, 1, 2.334, ....

但我试图让它像: 0, 1, 2.334,......, '', ''

Pet*_*etr 12

这是类似的解决方案,适用于非数值列/表达式:

/* @var $datasource QueryBuilder */  
$datasource->addSelect('CASE WHEN xxx.yyy IS NULL THEN 1 ELSE 0 END as HIDDEN yyy_is_null');
$datasource->orderBy('yyy_is_null', 'ASC'); // always ASC
$datasource->addOrderBy('xxx.yyy','DESC'); //DESC or ASC
Run Code Online (Sandbox Code Playgroud)


Dee*_*yal 6

解决方案:

我必须使用与距离相同的隐藏变量并minus(-)在其之前添加并使用新的隐藏变量对结果进行排序DESC order

$dql = 'SELECT (column1 * column2) as distance,
        -(column1 * column2) as HIDDEN distance1 
        FROM table
        ORDER BY distance1 DESC';

        $dq = $this->getEntityManager()->createQuery($dql);
Run Code Online (Sandbox Code Playgroud)