gpt4 book ai didi

sql - orderBy 几列 - Doctrine QueryBuilder

转载 作者:行者123 更新时间:2023-12-01 01:04:27 28 4
gpt4 key购买 nike

我想在几个列上使用 orderBY,但它们应该像一列一样。
该表看起来像这样:

col1 | col2
5 |
2 |
| 3
7 |
| 1
| 1

结果应该是这样的:
col1 | col2
| 1
| 1
2 |
| 3
5 |
7 |

如果我们使用原始 SQL,将会有方法,比如使用 COALESCE .

但是如何在 Doctrine QueryBuilder 中实现这一点呢?

编辑:

我像这样尝试了 orderBy:
qb->orderBy("COALESCE(col1, col2)", "DESC");

而像这样
qb->add("orderBy", "COALESCE(col1, col2) DESC");

但两次我都被抛出以下错误:
[Syntax Error] line 0, col 700: Error: Expected end of string, got '(' 

最佳答案

尝试在 select 语句中添加 order 列,然后按它排序。

$qb = $em->createQueryBuilder();
$qb
->select('entity', 'COALESCE(col1, col2) as orderCol')
->from('Namespace/Entity', 'entity')
->orderBy('orderCol', 'DESC')

也许使用 IF 会有所帮助来自 beberlei/DoctrineExtensions图书馆。用 composer 安装它(或者你可以根据需要复制一个文件)和

在 config.yml 中注册函数
doctrine:
orm:
entity_managers:
default:
dql:
string_functions:
IF: DoctrineExtensions\Query\Mysql\IfElse

并建立一个查询
$qb = $em->createQueryBuilder();
$qb
->select('entity', 'IF(col1, col1, col2) as orderCol')
->from('Namespace/Entity', 'entity')
->orderBy('orderCol', 'DESC')

另一种选择是使用 Native Query使用纯 mysql 并将结果映射到实体。

关于sql - orderBy 几列 - Doctrine QueryBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19952331/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com