2014-05-02 30 views
4

我想獲取結果,我需要按升序排序。但一些值將是空/空的,我需要在排序從0 1 2開始,然後爲空值的最後。學說2順序通過ASC和空值在最後

我試過SortableNullsWalker,但沒有幫助。我排序的值不是列,它是正在排序的兩個值的乘積,這就是爲什麼我認爲SortableNullsWalker不起作用。任何幫助,請

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

       ORDER BY distance ASC '; 

     $dq = $this->getEntityManager()->createQuery($dql); 

結果之際,'', '', 0, 1, 2.334, ....

但我試圖得到它喜歡:0, 1, 2.334,......, '', ''

回答

1

這是類似的解決方案,以非數值colums /表達式的工作原理:

/* @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 
+0

聰明,偉大的解決方案。應該接受答案 –

6

SOLUTION

我不得不使用具有相同的隱變量數值爲距離,並在其之前添加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); 
+0

你應該給予好評對方的回答,它實際上是更好的。歡呼聲 –

+1

@YesBarry。完成。謝謝:) –