Mysql Using为NULL,并在OrderBy原则Querybuilder中合并

Mysql Using为NULL,并在OrderBy原则Querybuilder中合并,mysql,symfony,doctrine-orm,doctrine,sql-order-by,Mysql,Symfony,Doctrine Orm,Doctrine,Sql Order By,我基本上有以下(我的)SQL查询 这项工作的表现是什么 我的目标是以下排序输出 ID| PARENT_ID | COMPANY | NAME 1 | NULL | A | NULL 2 | 1 | A.A | NULL 3 | 1 | A.B | NULL 4 | NULL | B | NULL 5 | NULL | C | NULL 6 | NULL | D

我基本上有以下(我的)SQL查询

这项工作的表现是什么

我的目标是以下排序输出

ID| PARENT_ID | COMPANY | NAME
1 | NULL      | A       | NULL
2 | 1         | A.A     | NULL
3 | 1         | A.B     | NULL
4 | NULL      | B       | NULL
5 | NULL      | C       | NULL
6 | NULL      | D       | NULL
7 | 6         | D.A     | NULL
8 | NULL      | NULL    | A
我用的是Symfony 2和学说。 目前我使用条令查询生成器,因为OrderBy应该是我用不同方面实现的搜索的一部分(按标签搜索,按不同字段“地址”搜索…)

当我尝试向添加“IS NULL”或“COALESCE”时

我发现条令不是特定于供应商的,因此不能支持所有供应商功能

我读了一篇关于扩展DQL函数的文章。但是已经有一个“isNull”函数使用了原则表达式,在OrderBy中对我来说不起作用


任何人都知道如何使用查询生成器实现所描述的OrderBy语句吗?

可能是这样的,这有助于:

$qb = $em->createQueryBuilder();
$qb->select('Entity, COALESCE(Entity.column1, Entity.column2) as columnOrder')
   ->from('Namespace\EntityName', 'Entity')
   ->addOrderBy('columnOrder', 'ASC')
   ->getQuery()
   ->execute();
谢谢你

我只是在symfony 3下发布了一个可用的替代方案,其功能是
IDENTITY()
:)


如果您使用
$qb->add('orderBy','company IS NULL')取而代之?似乎一个人只能按一个方向按一列排序(无论如何都是有意义的--)当然,我用你的代码测试了它,但是我又错过了它的合并部分。对于更新,我设法用我自己的扩展来解决当前的问题
$qb->add('orderBy', ' >ORDERBY_STATEMENT< ');
[Syntax Error] line 0, col 90: Error: Expected end of string, got 'IS'
$qb = $em->createQueryBuilder();
$qb->select('Entity, COALESCE(Entity.column1, Entity.column2) as columnOrder')
   ->from('Namespace\EntityName', 'Entity')
   ->addOrderBy('columnOrder', 'ASC')
   ->getQuery()
   ->execute();
$repository = $this->getDoctrine()->getRepository(Address::class);
$query = $repository->createQueryBuilder('a')
    ->select('a, COALESCE(IDENTITY(a.parent), a.id) as columnOrder')
    ->orderBy('columnOrder', 'ASC')
    ->addOrderBy('a.parent', 'ASC')
    ->getQuery();