4

Doctrine 是否能够按特定值对结果进行排序?

我会尝试做这样的事情..

$queryBuilder->addOrderBy($queryBuilder->expr()->eq('t0.ID',$ID));
$queryBuilder->addOrderBy('t0.ID');

得到类似这个查询的东西会返回。

select ID from test order by ID = '1234', ID;

例外:

Syntax Error line 0 col 72: Error: Expected end of string got '='

我也尝试使用 FIND_IN_SET 但这也不起作用。

有人可以帮助我吗?

4

2 回答 2

7

您可以添加Doctrine 扩展如果您使用 Symfony,则为),以便您可以使用 MySqlIF语句,然后在您的查询中您可以:

$qb->addSelect('IF(t0.ID = 1234, 1, 0) AS HIDDEN mainSort')

然后你可以使用它排序

$qb->orderBy('mainSort', 'DESC');

更新

如果不想添加 Doctrine 扩展,可以使用CASE常规 SQL 语句,这样:

$qb->addSelect('(CASE WHEN t0.ID = 1234 THEN 1 ELSE 0 END) AS HIDDEN mainSort')
于 2013-10-15T15:47:04.797 回答
-1

您不能在 ORDER BY 中设置值,order by ID = '1234'这对于 SQL 来说是正常的。而是使用SELECT ID FROM test WHERE ID = '1234' ORDER BY ID ASC

在理论上,这看起来像这样:

$qb->select('t')
     ->from('Test t')
     ->where('t.id = :identifier')
     ->orderBy('t.id', 'ASC')
     ->setParameter('identifier', 1234);
于 2013-08-07T10:03:54.303 回答