gpt4 book ai didi

mysql - 在 Doctrine 中定义 SQL 查询结果的顺序

转载 作者:行者123 更新时间:2023-11-29 11:05:29 24 4
gpt4 key购买 nike

我在 Symfony2 - Doctrine 应用程序中的具体问题:

我想按照自定义顺序(w.winnerType: 'main','special', 'normal', 'web)对查询的搜索结果进行排序,该顺序不是 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
") ;

这给出了错误消息:

[Syntax Error]: Error Expected end of string, got '='

版本 2

ORDER BY FIELD (w.winnerType, 'main','special', 'normal', 'web')    

给出错误信息

[Syntax Error] Error: Expected known function, got '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'

Debug Info: CRITICAL - Uncaught PHP Exception Doctrine\ORM\Query\QueryException: "[Syntax Error] line 0, col 314: Error: Expected end of string, got 'w'" at C:\Users\sDev2\xampp\htdocs\bvbp\vendor\doctrine\orm\lib\Doctrine\ORM\Query\QueryException.php

标准 SQL 自定义排序方法(发布在多个 stackoverflow 项目中)在我的 symfony/doctrine 环境中均不起作用。

如果我使用“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/doctrine 中使用的语法是什么?谢谢

最佳答案

我想以自定义顺序(w.winnerType: 'main','special', 'normal', 'web)对查询的搜索结果进行排序,该顺序不是 ASC 或 DSC,

如果您可以使用如下查询,那么它就会修复。

$em->createQueryBuilder('w')
->select('w')
->addSelect("(CASE WHEN w.winnerType like 'main' THEN 0
WHEN w.winnerType like 'special' THEN 1
WHEN w.winnerType like 'normal' THEN 2
WHEN w.winnerType like 'web' THEN 3
ELSE 999 END) AS HIDDEN fixed_order")
->from('WolfBvbpBundle:Winner', 'w')
->andWhere('w.winnerType IN (:typesdata)')
->setParameters(array(
'typesdata' => array('main', 'special', 'normal', 'web')))
->orderBy('fixed_order', 'ASC')
->getQuery();

请注意,您必须具有“隐藏”。

您也可以使用 Doctrine native 查询进行操作。

关于mysql - 在 Doctrine 中定义 SQL 查询结果的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41472907/

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