按照学说排列多列

我需要按两列对数据进行排序(当列号为1的行具有不同值时,按顺序排列;否则,按列号排序)

我正在使用QueryBuilder来创建查询。

如果我第二次调用orderBy方法,它会替换之前指定的任何顺序。

我可以传递两列作为第一个参数:

->orderBy('r.firstColumn, r.secondColumn', 'DESC');

但是我无法为第二个参数传递两个排序方向,所以当我执行此查询时,第一列按升序方向排序,第二列按降序排列。 我想为他们两个使用降序。

有没有办法使用QueryBuilder做到这QueryBuilder ? 我需要使用DQL吗?


您必须在列名后面添加订单方向:

$qb->orderBy('column1 ASC, column2 DESC');

如您addOrderBy ,多次调用orderBy不会堆栈,但可以多次调用addOrderBy

$qb->addOrderBy('column1', 'ASC')
   ->addOrderBy('column2', 'DESC');

在Doctrine 2.x中,不能像上面的例子那样通过使用doctrine'orderBy'或'addOrderBy'来传递多个订单。 因为,当您将第二个参数留空时,例如在'orderBy'函数中,它会在最后一个列名称末尾自动添加'ASC'。

例如->orderBy('a.fist_name ASC, a.last_name ASC')将输出类似于'ORDER BY first_name ASC,last_name ASC ASC'的SQL。 所以这是SQL语法错误。 只是因为orderBy或addOrderBy的默认值是'ASC'。

要添加多个订单,您需要使用“添加”功能。 它会是这样的。

->add('orderBy','first_name ASC, last_name ASC') 。 这会给你正确格式化的SQL。

有关add()函数的更多信息。 http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.QueryBuilder.html#_add

希望这可以帮助。 干杯!


你可以使用->addOrderBy($sort, $order)

Add:Doctrine Querybuilder btw。 通常使用普通方法的“特殊”修改,请参阅select-addSelectwhere-andWhere-orWheregroupBy-addgroupBy ...

链接地址: http://www.djcxy.com/p/34275.html

上一篇: Order by multiple columns with Doctrine

下一篇: LINQ Multiple Order By