2014-05-02 2 views
4

J'essaie d'aller chercher le résultat et j'ai besoin de le trier par ordre croissant. Mais certaines valeurs seraient nulles/vides, j'ai besoin d'être dans le dernier alors que le tri commence à partir de 0 1 2 et ensuite la valeur nulle.Doctrine 2 Ordre par ASC et valeurs nulles en dernier

J'ai essayé SortableNullsWalker mais cela n'a pas aidé. La valeur que je trie n'est pas une colonne, c'est une multiplication de deux valeurs qui sont triées, c'est pourquoi je pense que SortableNullsWalker n'a pas fonctionné. Toute aide s'il vous plaît

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

       ORDER BY distance ASC '; 

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

Le résultat se présente comme '', '', 0, 1, 2.334, ....

Mais je suis en train de le faire comme: 0, 1, 2.334,......, '', ''

Répondre

1

C'est une solution similaire, qui travaille avec des expressions non COLONNES/numériques:

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

Clever, excellente solution. Devrait être accepté réponse –

6

SOLUTION:

je devais utiliser une variable cachée avec la même valeur de la distance et ajouter minus(-) avant et Commander le résultat par nouvelle variable cachée dans 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

Vous devriez upvote l'autre réponse, il est en fait mieux. A bientôt –

+1

@YesBarry. Terminé. Merci :) –

Questions connexes