Mysql Using为NULL,并在OrderBy原则Querybuilder中合并
我基本上有以下(我的)SQL查询 这项工作的表现是什么 我的目标是以下排序输出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
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();