有条件的 Doctrine ORDER BY
Doctrine ORDER BY with conditions
我在 Doctrine 中有以下内容:
$query = $this->_em
->createQuery("SELECT f
FROM models\Food f
WHERE f.name LIKE :query
OR f.country LIKE :query
OR f.code = :query_full
ORDER BY f.code != :query_full, f.rank ASC")
->setParameters(
array(
"query" => "%$query%",
"query_full" => $query
));
查询在 MySQL Workbench 中有效,但 Doctrine 抛出异常:
[Syntax Error] line 0, col 359: Error: Expected end of string, got '!'
如何在 Doctrine 中编写该查询?这个想法是,如果查询匹配它,总是在结果顶部有 f.code
。
您可以尝试几种方法:使用SQL、QueryBuilder、DQL... 除了原生的SQL,其余的都需要在[=19=上使用CASE语句] 查询的一部分。
按照您的方法,您的查询将是:
$query = $this->_em
->createQuery("SELECT f, (CASE WHEN (f.id != :query_full) THEN 1 ELSE 0 END) as myOrderBy
FROM models\Food f
WHERE f.name LIKE :query
OR f.country LIKE :query
OR f.code = :query_full
ORDER BY myOrderBy ASC, f.rank ASC")
->setParameters(
array(
"query" => "%$query%",
"query_full" => $query
));
您必须将 ASC 或 DESC 和大小写设置为适合您的值。
应该可以。希望对你有帮助。
我在 Doctrine 中有以下内容:
$query = $this->_em
->createQuery("SELECT f
FROM models\Food f
WHERE f.name LIKE :query
OR f.country LIKE :query
OR f.code = :query_full
ORDER BY f.code != :query_full, f.rank ASC")
->setParameters(
array(
"query" => "%$query%",
"query_full" => $query
));
查询在 MySQL Workbench 中有效,但 Doctrine 抛出异常:
[Syntax Error] line 0, col 359: Error: Expected end of string, got '!'
如何在 Doctrine 中编写该查询?这个想法是,如果查询匹配它,总是在结果顶部有 f.code
。
您可以尝试几种方法:使用SQL、QueryBuilder、DQL... 除了原生的SQL,其余的都需要在[=19=上使用CASE语句] 查询的一部分。
按照您的方法,您的查询将是:
$query = $this->_em
->createQuery("SELECT f, (CASE WHEN (f.id != :query_full) THEN 1 ELSE 0 END) as myOrderBy
FROM models\Food f
WHERE f.name LIKE :query
OR f.country LIKE :query
OR f.code = :query_full
ORDER BY myOrderBy ASC, f.rank ASC")
->setParameters(
array(
"query" => "%$query%",
"query_full" => $query
));
您必须将 ASC 或 DESC 和大小写设置为适合您的值。
应该可以。希望对你有帮助。