【发布时间】:2017-01-13 16:21:16
【问题描述】:
我在 Symfony2 - Doctrine 应用程序中的具体问题:
我想按自定义顺序(w.winnerType:'main','special','normal','web)对查询的搜索结果进行排序,即 NOT ASC 或 DSC ,
我已经尝试了ORDER BY the IN value list(指向 Stackoverflow 的链接)中提出的几个版本
版本 1
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery (
"select w
FROM MyBundle:Winner w
WHERE
w.winnerType IN ('main', 'special', 'normal', 'web')
.
ORDER BY w.winnerType='main' DESC, w.winnerType='special' DESC,
w.winnerType='normal' DESC, w.winnerType='web' DESC
") ;
这给出了错误消息:
[语法错误]:错误应以字符串结尾,得到 '='
第 2 版
ORDER BY FIELD (w.winnerType, 'main','special', 'normal', 'web')
给出错误信息
[语法错误] 错误:预期已知 函数,得到'FIELD'
第 3 版
ORDER BY CASE w.winnerType
WHEN 'main' THEN 1
WHEN 'special' THEN 2
WHEN 'normal' THEN 3
WHEN 'web' THEN 4
ELSE 999
给出错误信息
QueryException: [Syntax Error] line 0, col 314: Error: Expected end of string, got 'w'
调试信息: CRITICAL - 未捕获的 PHP 异常 Doctrine\ORM\Query\QueryException: "[Syntax Error] line 0, col 314: Error: Expected end of string, got 'w'" 在 C:\Users\sDev2\xampp\htdocs\bvbp\vendor\doctrine\orm\lib\Doctrine\ORM\Query\QueryException.php
在我的 symfony/doctrine 环境中没有一个标准的 SQL 自定义排序方法(发布在几个 stackoverflow 项目中)。
如果我使用“ASC”参数(这不能解决我的问题):我的 Symfony 应用程序没有问题
示例(正常工作)
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery (
"select w
FROM MyBundle:Winner w
WHERE
w.winnerType IN ('main', 'special', 'normal', 'web')
.
ORDER BY w.winnerType ASC
") ;
symfony2 / 学说中使用的语法是什么? 谢谢
【问题讨论】:
-
mysql custom sort的可能重复
-
虽然您可能使用的是 Symphony2 - Doctrine,但您的问题与 SQL 语法密切相关。 Symphony2 和 Doctrine 标签已被删除,因为它们与问题无关。
-
可以删除学说和交响乐标签 - 接受您是专家 :-) 我唯一关心的是:stackoverflow 链接到“按 IN 值列表排序”(请参阅我的说明)列表正是我正在使用的语法,它似乎适用于其他用户。这就是为什么我认为它与教义/ symfony 有关
标签: mysql sql symfony doctrine