通过Symfony2中的多个值从数据库中订购记录

时间:2014-12-20 23:36:32

标签: mysql symfony doctrine-orm

我正在尝试按自定义顺序对一组结果进行排序。查询执行表中所有值的总和,并按特定类型对它们进行分组。我想按类型对记录进行排序,但这不是按字母顺序排列的格式。

这些是我想要结果的值和顺序:

Prevention
Minimisation
Reuse
Recycling
Energy Recovery
Disposal

以下是我使用的查询:

    $wasteHierarchy = $dm->createQuery('
        SELECT SUM(efu.totalUom) AS totalTonne, efu.wasteHierarchy
        FROM CoreBundle:EnviroFiguresUpload efu
        WHERE efu.completionDate BETWEEN :start AND :end
        AND efu.division IN (:profile)
        GROUP BY efu.wasteHierarchy
        ORDER BY efu.completionDate DESC'
    )->setParameters(array(
                'start' => $ds,
                'end' => $de,
                'profile' => $divisionProfiles
    ));

    $wasteHier = $wasteHierarchy->getResult();

我已尝试过此查询,但它在Symfony2中抛出错误:

        $wasteHierarchy = $dm->createQuery('
            SELECT SUM(efu.totalUom) AS totalTonne, efu.wasteHierarchy
            FROM CoreBumysql order by resultndle:EnviroFiguresUpload efu
            WHERE efu.completionDate BETWEEN :start AND :end
            AND efu.division IN (:profile)
            GROUP BY efu.wasteHierarchy
            ORDER BY efu.wasteHierarchy = :prevention, efu.wasteHierarchy = :minimisation, efu.wasteHierarchy = :reuse, efu.wasteHierarchy = :recycling, efu.wasteHierarchy = :energy, efu.wasteHierarchy = :disposal'
        )->setParameters(array(
                    'start' => $ds,
                    'end' => $de,
                    'profile' => $divisionProfiles,
                    'prevention' => 'Prevention',
                    'minisation' => 'Minimisation',
                    'reuse' => 'Reuse',
                    'recycling' => 'Recycling',
                    'energy' => 'Energy Recovery',
                    'disposal' => 'Disposal'
        ));

        $wasteHier = $wasteHierarchy->getResult();

有什么想法吗?

编辑1
这是Symfony2生成的错误:

  

[2/2] QueryException:[语法错误]第0行,第260行:错误:预期   字符串的结尾,得到了' ='

     

[1/2] QueryException:SELECT SUM(efu.totalUom)AS totalTonne,   efu.wasteHierarchy来自CoreBundle:EnviroFiguresUpload efu WHERE   efu.completionDate BETWEEN:开始AND:结束和efu.division IN   (:profile)GROUP BY efu.wasteHierarchy ORDER BY efu.wasteHierarchy =   :预防ASC,efu.wasteHierarchy =:最小化ASC,   efu.wasteHierarchy =:重用ASC,efu.wasteHierarchy =:回收ASC,   efu.wasteHierarchy =:energy ASC,efu.wasteHierarchy =:废弃ASC   +

2 个答案:

答案 0 :(得分:1)

在SQL中,您只能按列排序,而不能按列值排序。 这就是QueryException的原因。

有可能在mysql中做你想要的(也可能在其他dbms中):ORDER BY FIELD

答案 1 :(得分:0)

SQL的这一部分是错误的:

ORDER BY efu.wasteHierarchy = :prevention, efu.wasteHierarchy = :minimisation, efu.wasteHierarchy = :reuse, efu.wasteHierarchy = :recycling, efu.wasteHierarchy = :energy, efu.wasteHierarchy = :disposal

您无法在ORDER BY子句中设置值。查看此link,它解释了如何正确使用ORDER BYORDER BY之后是ASC | DESC关键字。

您尝试添加的所有参数可能应将其移至WHERE子句check this link以获取更多信息。